以极大值声明动态常数

问题描述 投票:1回答:1

我需要将变量声明为常量,该变量是在程序运行时生成的,我尝试过这种方式:

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

foo(x)$

facts();

但是那不起作用,我得到:

[kind(var, constant)]

每次。

代替:

[kind(x, constant)]

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

var: x$

declare(''var, constant)$

facts();

我得到:

[kind(x, constant)]

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

math constants maxima declare
1个回答
0
投票

即使对于以其他方式引用其参数的函数,也要确保对参数进行求值的常规方法是apply将函数赋给参数。例如:

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

或者,在函数中:

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

[apply计算其参数,因此在函数看到它们的时间之前对参数进行评估。

quote-quote ''var在函数中没有预期的效果,因为quote-quote仅在解析表达式时才应用。因此,以后再分配给var都无效。

我建议反对eval_string。几乎总是有比字符串处理更好的方法。在这种情况下,更好的方法是apply

© www.soinside.com 2019 - 2024. All rights reserved.