2016-11-16 70 views
0

我試圖取代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

回答

1

您需要添加額外的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

0

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