Программа пролога для нахождения равенства двух списков в любом порядке

Я хотел записать программу Пролога для нахождения равенства двух списков, где порядок элементов
не имеет значения. Таким образом, я записал следующее:

del(_, [], []) .
del(X, [X|T], T).  
del(X, [H|T], [H|T1]) :-
   X \= H,
   del(X, T, T1).

member(X, [X|_]).  
member(X, [_|T]) :- 
   member(X, T).

equal([], []).  
equal([X], [X]).  
equal([H1|T], L2) :-
   member(H1, L2),
   del(H1, L2, L3),
   equal(T, L3).  

Но когда я даю вход как equal([1,2,3],X)., это не показывает все возможные значения X. Вместо этого программа зависает в середине. Какова могла быть причина?

8
задан repeat 31 January 2019 в 20:08
поделиться

2 ответа

isSubset([],_).
isSubset([H|T],Y):-
    member(H,Y),
    select(H,Y,Z),
    isSubset(T,Z).
equal(X,Y):-
    isSubset(X,Y),
    isSubset(Y,X).
7
ответ дан 5 December 2019 в 09:24
поделиться

Попробуйте следующее:

equal([],[]).
equal([Ha|Ta],[Hb|Tb]) :-
   Ha = Hb, lequal(Ta,Tb).
1
ответ дан 5 December 2019 в 09:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: