对于作业,我必须动态生成prolog程序体。我怎么能这样做?
答案 0 :(得分:1)
有关谓词的swi prolog手册说明,请参阅here。
作为一个例子考虑以下
goal :- Z =.. [foo, 1],
Y =.. [bar,2],
X =.. [',', Z, Y],
R =.. [':-', r, X],
assert(Z), assert(Y), assert(X), assert(R).
PS:另一种可能性是较低级别,但有时可能是更好的选择:只需打印出构建文件所需的内容。
答案 1 :(得分:0)
断言/ 1,断言/ 1,收回/ 1,撤回所有/ 1,取消/ 1
答案 2 :(得分:0)
添加谓词需要使用asserta / 1或assertz / 1(不推荐使用assert / 1)more 如果您已经在加载的代码中声明了谓词的某些子句,则应使用dynamic / 1 more
将谓词定义为动态形成子句取决于输入的形式。 如果你有一个包含谓词名称的列表和你可以使用的参数=../2 如果您在字符串上有子句,则可以使用term_to_atom/2(它可以双向工作)
答案 3 :(得分:0)
您可以使用' (
'生成动态谓词。和' )
'封闭的身体。
assert(test(X):- (X1 is X+1, write(X1)))