A list represents a set if no element repeats. So set/1 verifies if each element occurs only once in a list. ?- is_set([a,b,c,c,d]). false. ?- is_set([a,b,c]). true. ?- is_set([a,[b,a],c]). true. ?- is_set([]). true.
myset([]). myset([X|T]):- not(member(X,T)),myset(T).