我尝试在 SWI-Prolog 中自动声明一些规则:
generate_rule_len(FG,SG):-
length(FG,L),length(SG,L0),
Head = input_len(FG,SG,FS,SS,X),
Body = (length(FG,L1),L1 is L, length(SG,L2), L2 is L0, X = SS),
% Rule = (Head :- Body), \+Rule,
assertz(Head :- Body),
append('rulesDB.pl'),
writeq(Head :- Body),write('.'),nl,
told.
这工作得很好,但是 rulesDB.pl 中的断言结果不使用FG,SG,FS,SS,X
它们被替换为它们的内存位置(?)的变量的名称,这看起来像:
input_len(_3078,_3080,_3082,_3084,_3086):-
length(_3078,_3098),_3098 is 2,length(_3080,_3122),_3122 is 2,_3086=_3084.
是否可以改用变量的名称?
此外,我想防止生成规则的重复。因此我尝试Rule = (Head :- Body), \+Rule,
了,但这给了我一个Undefined procedure: (:-)/2
. 谁能告诉我我的代码有什么问题?
提前致谢!