在 Maxima 中声明一个动态常量

Declare a dynamic constant in Maxima

我需要声明一个变量为常量,这个变量是在程序运行时生成的运行,我试过这样:

foo(var) := declare(''var, constant)$

foo(x)$

facts();

但这不起作用,我得到:

[kind(var, constant)]

每次。

改为:

[kind(x, constant)]

当我编写没有函数的代码时,一切正常:

var: x$

declare(''var, constant)$

facts();

我得到:

[kind(x, constant)]

有谁知道如何通过函数动态执行此操作

确保参数被评估的传统方法,即使对于以其他方式引用其参数的函数,也是 apply 参数的函数。例如:

apply (declare, [var, 'constant]);

或者,在函数中:

foo(var) := apply (declare, [var, 'constant]);

apply 评估其参数,因此参数在函数看到它们时评估。

quote-quote ''var 在函数中没有预期的效果,因为 quote-quote 仅在解析表达式时应用。因此,以后对 var 的任何赋值都无效。

我反对 eval_string。几乎总是有比字符串处理更好的方法来做任何事情;在这种情况下,更好的方法是 apply.