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