1

我尝试在 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. 谁能告诉我我的代码有什么问题?

提前致谢!

4

0 回答 0