Maxima 和 LISP

Maxima 是函数式的,它使用 Common Lisp 写的。所以有很多 LISP 的特性。下面列举一些:

Quote

跟 LISP 一样,用单引号 ' 可以防止后面的内容被计算出来。

'F(x); /* 原封不动返回 F(x) */

FUNMAKE(f,[b]); 相当于 `(f ,b)

quosiquote. 参数的值被计算出来,但是函数并不被调用。

比如:

f(x):=x*2;
b:10;
FUNMAKE(f,[b]);

将得到 F(b) 这个表达式。而不会得到 20.

" 相当于 eval. 它会把得到的表达式再 evaluate 一次。比如:

b:10;
f(x):=x*2;
exp:FUNMAKE(f, [b]); /* 得到一个表达式 F(10) */
''exp; /* 得到这个 F(10) 的值:20 */

DEFINE(f(x1...), body) 相当于 f(x1,...):="body

这种定义方式可以在运行时进行,这样我们可以按条件确定是否执行 函数定义。

比如:

body:x+2;
DEFINE(g(x), body);
g(3); /* 得到 5 */