替代变量?
问题描述:
我试图取代L
与Lα
:替代变量?
f(x) := c * (x + L);
c: L;
f(x), L: Lα;
我所期望的输出:
Lα * (x + Lα)
,而不是我
L * (x + Lα)
也许我应该define
f(x)
呢?
kill(all);
define(
f(x),
c * (x + L)
);
c: L;
f(x), L: Lα;
不是 - 同样的结果。
我是否用错误的方式将L
替换为Lα
?
编辑:
原来这是预期的行为,如最大值ev
avluates表达一次。一个can impose "infinite evaluation"通过标志infeval:
另一种解决方案是使用subst代替:
subst(
Lα, L, f(x)
);
(source)
答
您需要添加额外的eval
的步骤,使这项工作:
f(x) := c * (x + L);
c: L;
f(x), L: Lα, eval;
输出:
Lα (x + Lα)
答
使用subst代替ev。
(%i1) f(x) := c * (x + L)$
(%i2) c: L$
(%i3) subst(L=La,f(x));
(%o3) La (x + La)
但请记住,函数继续为c *(x + L)。符号c已被绑定到L,如果您将符号L绑定到La,c将继续绑定到L而不是La。Maxima变量的工作方式与Lisp中的相同,这可能与您以前使用的方法不同其他语言。
很好,它的工作原理。你能评论为什么maxima以这种方式工作吗?它与评估表达式的顺序有关吗? – Adobe
@Adobe:AFAIK默认情况下只进行一次评估([尽管有例外](http://maxima.sourceforge.net/docs/manual/maxima_8.html#evflag)),这意味着'c = L',为了去'c = L = La'最大值需要第二次评估。 – Thor