我需要将变量声明为常量,该变量是在程序运行时生成的,我尝试过这种方式:
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
。