views:

240

answers:

2

I wanted to write a prolog program to find equality of two lists, the order of elements
doesn't matter.
So I wrote 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?

+1  A: 
isSubset([],_).
isSubset([H|T],Y):-
    member(H,Y),
    select(H,Y,Z),
    isSubset(T,Z).
equal(X,Y):-
    isSubset(X,Y),
    isSubset(Y,X).
Mr. Berna
A: 

try this one :

equal([],[]). equal([Ha|Ta],[Hb|Tb]) :- Ha = Hb, lequal(Ta,Tb).

Başak Bilgi

Başak Bilgi