8 @node Lisp与Maxima, 垃圾收集, 帮助, 帮助
9 @section Lisp and Maxima
10 Maxima是用Lisp写的,从Maxima里很容易访问Lisp的函数与变量,反之也一样.
11 Lisp与Maxima的标志符通过命名习惯来区分.
12 一个以美元符号@code{$}开始的Lisp标志符对应于一个没有美元符号的Maxima标志符.
13 @c NEED TO MENTION THIS OR IS IT JUST CLUTTERING ??
14 @c This includes special Maxima variables such as @code{%} and input and output labels,
15 @c which appear as @code{$%}, @code{$%i1}, @code{$%o1}, etc., in Lisp.
17 一个以问号@code{?}开始的Maxima标志符对应于一个没有问号的Lisp标志符.
19 例如Maxima标志符@code{foo}对应于Lisp标志符@code{$foo},而Maxima标志符@code{?foo}对应于Lisp标志符@code{foo},注意书写@code{?foo}时@code{?}与@code{foo}之间没有空格,否则可能会误认为是@code{describe ("foo")}.
21 连接号@code{-},星号@code{*}或者其它在Lisp中的标志符当它们出现在Maxima代码中时必须通过反斜杠@code{\}来转义.
22 例如,Lisp标志符 @code{*foo-bar*}在Maxima中要写成@code{?\*foo\-bar\*}.
25 包含一种或者多种形式的一行Lisp代码可以通过特殊命令command @code{:lisp}来执行.例如
28 (%i1) :lisp (foo $x $y)
31 将调用Lisp函数@code{foo},并以Maxima变量@code{x}与@code{y}作为参数.
32 @code{:lisp} 结构能出现在交互式提示符中或者在一个通过@code{batch} 与 @code{demo}处理过的文件中,
33 但是不能出现在@code{load}, @code{batchload}, @code{translate_file}, 或 @code{compile_file}处理的文件中.
35 函数@code{to_lisp()}将开启一个交互式Lisp环境.
36 键入@code{(to-maxima)} 将关闭这个交互式环增色并返回Maxima.
38 @c I DON'T EVEN WANT TO MENTION USING CTRL-C TO OPEN A LISP SESSION.
39 @c (1) IT TAKES EXTRA SET UP TO GET STARTED NAMELY :lisp (setq *debugger-hook* nil)
40 @c (2) IT GETS SCREWED UP EASILY -- TYPE SOMETHING WRONG AND YOU CAN'T GET BACK TO MAXIMA
41 @c (3) IT DOESN'T OFFER FUNCTIONALITY NOT PRESENT IN THE to_lisp() SESSION
43 那些打算在Maxima中可见的只有普通的名字的Lsip函数与变量,它的Lisp名字必须以美元标志@code{$}开始.
44 Maxima是大小写敏感的,可以区分大写与小写字母的标志符,然而Lisp却不是.
45 有一些规则来控制这些名字在Lisp与Maxima中的变化.
49 一个没有被竖条围住的Lisp标志符对应一个小写的Maxima标志符
50 无论Lisp标志符是大写,小写还是大小写混杂的都将被忽略,例如Lisp的@code{$foo}, @code{$FOO}, 和 @code{$Foo}都对应着Maxima的 @code{foo}.
53 全大写或者全小写并且用竖条围住的Lisp标志符对应着Maxima的标志符大小写颠倒的.
55 如Lisp标志符Lisp @code{|$FOO|} 与 @code{|$foo|}各自对应着Maxima的@code{foo} 与 @code{FOO}.
58 一个大小写混杂的并且用竖条围着Lisp标志符对应着Maxima同样的标志符,
59 例如Lisp标志符@code{|$Foo|}对应着Maxima中的@code{Foo}.
62 Lisp宏@code{#$}允许在Lisp代码中运用Maxima表达式.
63 Lisp表达式@code{#$@var{expr}$}等同于 Maxima表达式@var{expr}.
66 (msetq $foo #$[x, y]$)
77 Lisp函数@code{displa} 以Maxima格式输出一个表达式.
80 (%i1) :lisp #$[x, y, z]$
81 ((MLIST SIMP) $X $Y $Z)
82 (%i1) :lisp (displa '((MLIST SIMP) $X $Y $Z))
87 在Maxima中定义的函数不是普通的Lisp函数.
88 Lisp函数@code{mfuncall}调用一个Maxima函数.
92 (%i1) foo(x,y) := x*y$
93 (%i2) :lisp (mfuncall '$foo 'a 'b)
97 一些Lisp函数在Maxima包中是看不见的,它们是:
122 @node 垃圾收集,文档,Lisp与Maxima,帮助
124 符号运算很容易产生大量垃圾,有效的处理这些垃圾对一些程序的完成是非常重要的.
126 @c HOW MUCH OF THE FOLLOWING STILL HOLDS ??
127 @c WHAT ABOUT GC IN GCL ON MS WINDOWS ??
128 @c SHOULD WE SAY SOMETHING ABOUT GC FOR OTHER LISPS ??
130 GCL语言下可以调用UNIX系统(包括SUN OS4.0 及一些变种BSD)的mprotect系统,那是一种分层的垃圾收集功能.
131 这限制了最近写入的页的回收.参见GCL文档中ALLOCATE与GBC,在Lisp层次下使用(setq si::*notify-gbc* t)能帮助你决定哪一个层次需要更多空间.
134 @node 文档, 帮助有关函数与变量,垃圾收集,帮助
137 @c SHOULD TALK ABOUT OTHER FORMS OF DOCUMENTATION ASIDE FROM ON-LINE MANUAL.
139 Maxima在线用户手册可以通过多种形式阅读,在Maxima交互式命令行中,用户手册可以用@code{?}命令显示成普通文本(例如@code{describe} 函数),还可以显示成@code{info}超文本通过 @code{info} 显示程序来看,也可以通过网页通过网页浏览器来看.
141 @code{example} 显示了许多Maxima函数例子.
145 (%i1) example (integrate);
151 (%i2) test(f):=block([u],u:integrate(f,x),ratsimp(f-diff(u,x)))
152 (%o2) test(f) := block([u], u : integrate(f, x),
154 ratsimp(f - diff(u, x)))
159 (%i5) test(1/(x^2+1))
168 @deffn {Function} demo (@var{filename})
169 评估@var{filename}里Maxima表达式并显示结果.
170 @code{demo}将会在评估完每一个表达式后暂停,等待用户输入回车键继续.
171 如果是在Xmaxima里运行,@code{demo}可能需要输入一个分号@code{;}再按回车.
173 @code{demo} 搜索目录列表@code{file_search_demo} 来查找@code{filename}
174 如果文件有@code{dem}后缀,这个后缀可能会被省略掉. 参见@code{file_search}.
178 @code{demo} 返回演示的文件名.
183 (%i1) demo ("disol");
185 batching /home/wfs/maxima/share/simplification/disol.dem
186 At the _ prompt, type ';' followed by enter to get next demo
190 (%i3) exp1 : a (e (g + f) + b (d + c))
191 (%o3) a (e (g + f) + b (d + c))
194 (%i4) disolate(exp1, a, b, e)
199 (%o5) a (%t5 e + %t4 b)
202 (%i5) demo ("rncomb");
204 batching /home/wfs/maxima/share/simplification/rncomb.dem
205 At the _ prompt, type ';' followed by enter to get next demo
210 (%i7) exp1 : ----- + ---------
213 (%o7) ----- + ---------
219 (%o8) ----- + ---------
230 (%i10) exp2 : - + - + - + -
238 2 d + 2 c + 3 (b + a)
239 (%o11) ---------------------
243 (%i12) rncombine(exp2)
244 2 d + 2 c + 3 b + 3 a
245 (%o12) ---------------------
254 @deffn {Function} describe (@var{string})
255 @deffnx {Function} describe (@var{string}, exact)
256 @deffnx {Function} describe (@var{string}, inexact)
261 @code{describe(@var{string})} 等同于 @code{describe(@var{string}, exact)}.
263 @code{describe(@var{string}, exact)}查找一个名称等同于(大小写不敏感) @var{string}的子项, 当然要存在那么一个子项.
265 @code{describe(@var{string}, inexact)} 搜索所有标题中包含@var{string}的文档子项,
266 如果找到多于一个子项,Maxima将会询问用户显示哪一项或者多项.
268 在交互式命令行中@code{? foo} (@code{?} 与 @code{foo}中有一个空格)等同于@code{describe("foo", exact)},
269 @code{?? foo}等同于 @code{describe("foo", inexact)}.
271 @code{describe("", inexact)}将输出所有在线手册主题列表.
273 @code{describe}将它的参数括起来了.
274 如果@code{describe}找到文档将返回@code{true},否则返回@code{false}.
276 参见 @ref{Documentation}.
282 0: Functions and Variables for Elliptic Integrals
283 1: Functions and Variables for Integration
284 2: Introduction to Elliptic Functions and Integrals
285 3: Introduction to Integration
286 4: askinteger (Functions and Variables for Simplification)
287 5: integerp (Functions and Variables for Miscellaneous Options)
288 6: integer_partitions (Functions and Variables for Sets)
289 7: integrate (Functions and Variables for Integration)
290 8: integrate_use_rootsof (Functions and Variables for
292 9: integration_constant_counter (Functions and Variables for
294 10: nonnegintegerp (Functions and Variables for linearalgebra)
295 Enter space-separated numbers, `all' or `none': 7 8
297 -- Function: integrate (<expr>, <x>)
298 -- Function: integrate (<expr>, <x>, <a>, <b>)
299 Attempts to symbolically compute the integral of <expr> with
300 respect to <x>. `integrate (<expr>, <x>)' is an indefinite
301 integral, while `integrate (<expr>, <x>, <a>, <b>)' is a
302 definite integral, [...]
304 -- Option variable: integrate_use_rootsof
305 Default value: `false'
307 When `integrate_use_rootsof' is `true' and the denominator of
308 a rational function cannot be factored, `integrate' returns
309 the integral in a form which is a sum over the roots (not yet
310 known) of the denominator.
314 在这个例子中,子项7与子项8被选择了.可以用 @code{all}或者@code{none}来全选或全不选,也可以用它们的缩写形式,@code{a} 与 @code{n}.
317 @deffn {Function} example (@var{topic})
318 @deffnx {Function} example ()
319 @code{example (@var{topic})} 将显示 @var{topic}中的一些例子,var{topic}是符号而不是字符串.
320 许多题目都是函数名称.@code{example ()} 将返回所有认识的主题列表.
321 包含例子的文件名是通过全局变量@code{manual_demo}给定的,它的缺省值是 @code{"manual.demo"}.
323 @code{example} 括起了它的参数.
324 @code{example} 将返回 @code{done},如遇到错误或者没有参数@code{example}将返回所有认识的题目.
329 (%i1) example (append);
330 (%i2) append([x+y,0,-3.2],[2.5E+20,x])
331 (%o2) [y + x, 0, - 3.2, 2.5E+20, x]
333 (%i3) example (coeff);
334 (%i4) coeff(b+tan(x)+2*a*tan(x) = 3+5*tan(x),tan(x))
336 (%i5) coeff(1+x*%e^x+y,x,0)