Утверждение правила Пролога с именем переменной
Я пытаюсь автоматически утверждать некоторые правила в 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
, Кто-нибудь может сказать мне, что не так с моим кодом?
Заранее спасибо!