Maxima:函数的翻译运算符

Maxima: Translation operator on functions

我想定义一个翻译运算符 L,它从函数 q 为所有 x 输出 q(x-1),即相同的函数,但向左移动一位。我是这样定义的:

(%i0) L(q) := q(x-1);

但是,如果我应用运算符两次

(%i1) L(L(q));

它输出

(%o1) q(x-1)(x-1)

而不是

(%o1) q(x-2)

执行此操作的正确方法是什么?

L 必须 return 一个函数才能使这种嵌套工作。

或许,一个简单的替换就足以完成任务:

L(f) := subst(x=x-1,f)$
L(sin(x));     L(L(sin(x)));
  sin(x - 1)
  sin(x - 2)

带有 lambda 的宏也可以工作:

L(q) ::= buildq([q], lambda([x], q(x-1)));

所以,例如,当 f(x):= x + 1, g(x) := sin(%pi*(x-1)/4):

f(1);    L(f)(1);    L(L(f))(1);
2
1
0
g(1);    L(g)(1);    L(L(g))(1);
0
-1/sqrt(2)
-1