可以使用consult/1
或[filename].
轻松查阅Prolog文件。
假设我将Prolog代码生成为原子。我可以在谓词中将该代码写入文件然后查阅它,并从该代码中查询谓词,例如
example :-
generate_stuff(X),
write_to_file(X,'filename.pl'),
consult('filename.pl'),
predicate_in_filename.
如果不将X
(代码)写入文件,我将如何做同样的事情?我没有运气assert
以一个术语作为输入而在这里我在原子中有完整的代码。
答案 0 :(得分:3)
干净的方式当然是不甚至首先产生一个原子,但从一开始就是一个更有条理的表示。
但是,如果您真的想使用原子并稍后将它们视为结构化术语,请使用 atom_to_term/3
,然后断言该子句。
例如:
?- atom_to_term('p(X, Y) :- dif(X, Y)', T, Vs). T = (p(_G925, _G926):-dif(_G925, _G926)), Vs = ['X'=_G925, 'Y'=_G926].
在您的情况下,您可以忽略Vs
:
?- atom_to_term('p(X, Y) :- dif(X, Y)', T, _). T = (p(_G916, _G917):-dif(_G916, _G917)).
答案 1 :(得分:0)
对于后代,这是我如何做到的,只要你在列表的每个原子中只有一个术语:
%...
maplist(read_term_from_atom_, ListOfAtoms, ListOfTerms),
maplist(asserta, ListOfTerms),
%...
read_term_from_atom_(A, B) :-
read_term_from_atom(A, B, []).