Пролог головоломки бесконечной рекурсии - PullRequest
0 голосов
/ 25 апреля 2020

с учетом следующих правил: 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)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...