Как сравнить переменные по образцу, определенному пользователем? - PullRequest
1 голос
/ 28 апреля 2019

Мой предикат должен сравнивать переменные в соответствии с шаблоном, установленным пользователем.

Например:

p1([A,A,B,A],[1,1,5,1]).
true

p1([A,A,B,C],[1,1,1,5]).
false

p1([A,B,B,A,C],[2,3,3,2,1]).
true

и т.д.

Пока мой код работает только для 2 переменных. Я не знаю, как сделать все это рекурсивным.

isEqual(A,A).

pattern([A],X):-isEqual(A,X).
pattern([A,A],X):-isEqual(A,A),isEqual(X,[N1,N2]),isEqual(N1,N2).
pattern([A,B],X):-isEqual(X,[N1,N2]),not(isEqual(N1,N2)),A\==B.

1 Ответ

1 голос
/ 29 апреля 2019

Этот предикат по своей сути нечист. Кажется, что предполагается, что все переменные в шаблоне разные.

pattern_instance(Varpattern, Instance) :-
   term_variables(Varpattern, Vs),
   \+ \+ ( Varpattern = Instance, alldifferent(Vs) ).

alldifferent([]).
alldifferent([X|Xs]) :-
   maplist(dif(X), Xs),
   alldifferent(Xs).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...