Правя проект и съм заседнал в ситуация, в която трябва да сравня два списъка и да се върна, ако поне един член от списък е в друг списък. Доста просто, но списъците може да съдържат не само числа, но и набор от числа. Нещо като: [1,3,обхват(5,10),25]
Мисля, че основният ми проблем е повторението на списъците, защото връща true само ако първият член на списъка съвпада с атома. Това е моят код за сравнение:
findin(E,[H|T]) :-
E == H ;
(H == range(X,Y), E \== range(Xe,Ye), between(X,Y,E)) ;
(E == range(Xe,Ye), H \== range(X,Y), between(Xe,Ye,H)) ;
(E == range(Xe,Ye), H == range(X,Y), (between(X,Y,Xe) ; between(Xe,Ye,X))) ,
findin(E,T).
И кодът за извикване на функцията findin/2:
find([Ha|Ta],[Hb|Tb]) :-
findin(Ha,[Hb|Tb]),
find(Ta,[Hb|Tb]).
пропускам нещо? Също така, някакви идеи за повторение на списъци A и B от функцията find/2?
=
означава обединяване на променливи и==
сравняването им и в prolog те извикват range(X,Y) предикат/2, а не функция, така че няма да върнат стойност. - person Luai Ghunim   schedule 05.11.2017