我需要将一个变量声明为常量,该变量是在程序运行时生成的,我尝试了这种方法:
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
计算其参数,因此参数是根据函数看到它们的时间来计算的。
引号''var
在函数中没有预期的效果,因为引号仅在解析表达式时应用。因此,以后对var
的任何赋值都无效。
我建议不要使用eval_string
。几乎总是有比字符串处理更好的方法来做任何事情;在这种情况下,更好的方式是CCD_ 6。