对于分配,我必须动态生成一个 prolog 过程主体。我怎样才能做到这一点?
问问题
900 次
4 回答
2
有关相关谓词的 swi prolog 手册描述,请参见此处。
例如,考虑以下
goal :- Z =.. [foo, 1],
Y =.. [bar,2],
X =.. [',', Z, Y],
R =.. [':-', r, X],
assert(Z), assert(Y), assert(X), assert(R).
PS:另一种可能性是低级,但有时可能是更好的选择:只需将您需要构建的内容打印到文件中即可。
于 2011-05-10T13:18:05.233 回答
0
断言/1,断言/1,收回/1,收回全部/1,废除/1
于 2011-05-10T12:25:40.340 回答
0
要添加谓词,您需要使用 asserta/1 或 assertz/1(不推荐使用 assert/1) 如果您已经在加载的代码中声明了谓词的某些子句,则应该使用 dynamic/ 将谓词定义为动态的还有1个
形成子句取决于输入的形式。如果您有一个包含谓词名称和参数的列表,则可以使用=../2 如果您在字符串上有子句,则可以使用term_to_atom/2(双向工作)
于 2011-05-10T12:34:35.920 回答
0
(
您可以使用 ' ' 和 ' )
' 封闭主体生成动态谓词。
assert(test(X):- (X1 is X+1, write(X1)))
于 2016-10-20T04:09:44.387 回答