Утверждение правила Пролога с именем переменной

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

Заранее спасибо!

0 ответов

Другие вопросы по тегам