Prolog program to find equality of two lists in any order

any, failure-slice, list, prolog

Solution

isSubset([],_).
isSubset([H|T],Y):-
    member(H,Y),
    select(H,Y,Z),
    isSubset(T,Z).
equal(X,Y):-
    isSubset(X,Y),
    isSubset(Y,X).

Problem

I wanted to write a Prolog program to find equality of two lists, where the order of elements doesn't matter. So I wrote the following: ``` 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). ``` But when I give input like `equal([1,2,3],X).`, it doesn't show all possible values of `X`. Instead, the program hangs in the middle. What could be the reason?

Original source

Related problems