1

对于分配,我必须动态生成一个 prolog 过程主体。我怎样才能做到这一点?

4

4 回答 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 回答