动态prolog子句体生成

时间:2011-05-10 12:00:05

标签: dynamic code-generation prolog clause

对于作业,我必须动态生成prolog程序体。我怎么能这样做?

4 个答案:

答案 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)))