替代变量?

Substitute variable?

我正在尝试将 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 替换 的方式有误吗?

编辑:

事实证明这是预期的行为,因为 maxima evavluates 表达式仅一次。一个 can impose "infinite evaluation" 通过标志 infeval:

f(x), L: La, infeval;
 => La*(x + La)

另一个解决方案是使用 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 中的一样,这可能与你在其他语言。