Dynamic 动态prolog子句体生成

Dynamic 动态prolog子句体生成,dynamic,code-generation,prolog,clause,Dynamic,Code Generation,Prolog,Clause,对于赋值,我必须动态生成prolog过程体。如何执行此操作?要添加谓词,您需要使用asserta/1或assertz/1(assert/1不推荐使用) 如果已经在加载的代码中声明了谓词的某些子句,则应该使用dynamic/1将谓词定义为dynamic 子句的形成取决于输入的形式。 如果您有一个包含谓词名称和可以使用的参数的列表 如果在字符串上有子句,则可以使用(它双向工作)有关相关谓词的swi prolog手册说明,请参阅 作为一个例子,考虑下面的 goal :- Z =.. [foo, 1],

对于赋值,我必须动态生成prolog过程体。如何执行此操作?

要添加谓词,您需要使用asserta/1或assertz/1(assert/1不推荐使用) 如果已经在加载的代码中声明了谓词的某些子句,则应该使用dynamic/1将谓词定义为dynamic

子句的形成取决于输入的形式。 如果您有一个包含谓词名称和可以使用的参数的列表 如果在字符串上有子句,则可以使用(它双向工作)

有关相关谓词的swi prolog手册说明,请参阅

作为一个例子,考虑下面的

goal :- Z =.. [foo, 1], 
    Y =.. [bar,2], 
    X =.. [',', Z, Y], 
    R =.. [':-', r, X],  
    assert(Z), assert(Y), assert(X), assert(R).

PS:另一种可能性是较低的类,但有时可能是更好的选择:只需将需要构造的内容打印到文件。

您可以生成包含“
”和“
”的动态谓词

assert(test(X):- (X1 is X+1,  write(X1)))