с учетом следующих правил: ds = ssd, ps = ddp, dm = m, ts = t, tm = a, pdm = dsm, можем ли мы доказать, что tpppdddsm = a?
Мой последний код: следующим образом, но это не работает.
:- dynamic seen/1.
head_replacement([d,s | X], [s,s,d | X]).
head_replacement([p,s | X], [d,d,p | X]).
head_replacement([d,m | X], [m | X]).
head_replacement([t,s | X], [t | X]).
head_replacement([t,m | X], [a | X]).
head_replacement([p,d,m | X], [d,s,m | X]).
acceptable(L1, L2) :- length(L1, LL1), length(L2, LL2), DIFF is LL1 - LL2, abs(DIFF) < 15.
% Non-transformed head term
list_replacement([], []).
list_replacement([H|T1],[H|T2]) :-
%write([[H,T1],[H,T2]]),
list_replacement(T1,T2).
% Heads that are transformed
list_replacement(L1, L2) :-
(head_replacement(L1, L2);
head_replacement(L2, L1)), acceptable(L1,L2).
run(A,B) :-
list_replacement(A,Temp),
dif(A,Temp),
not(seen(Temp)), assert(seen(Temp)),
(B = Temp ; run(Temp,B)).