替代变量?

问题描述:

我试图取代L替代变量?

f(x) := c * (x + L); 
c: L; 
f(x), L: Lα; 

我所期望的输出:

Lα * (x + Lα) 

,而不是我

L * (x + Lα) 

也许我应该definef(x)呢?

kill(all); 

define(
    f(x), 
    c * (x + L) 
); 

c: L; 
f(x), 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α) 
+0

很好,它的工作原理。你能评论为什么maxima以这种方式工作吗?它与评估表达式的顺序有关吗? – Adobe

+0

@Adobe:AFAIK默认情况下只进行一次评估([尽管有例外](http://maxima.sourceforge.net/docs/manual/maxima_8.html#evflag)),这意味着'c = L',为了去'c = L = La'最大值需要第二次评估。 – Thor

使用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中的相同,这可能与您以前使用的方法不同其他语言。