different(Xs, Ys) :-
member(X, Xs),
non_member(X, Ys).
different(Xs, Ys) :-
member(Y, Ys),
non_member(Y, Xs).
Хотя это определение с использованием member/2
и non_member/2
почти 1 совершенный с декларативной точки зрения, он создает избыточные решения для определенных запросов и оставляет все точки выбора.
Что такое определение, которое улучшает это (в чистом виде, вероятно, используя if_/3
и (=)/3
), так что точно такой же набор решений описывается different/2
, но определяется по крайней мере для наземных запросов (таким образом, не оставляет бесполезных точек выбора открытым) и опускает (если возможно) любой избыточный ответ?
1 <суб > Фактически, different([a|nonlist],[]), different([],[b|nonlist])
преуспевает. Это может также потерпеть неудачу. Таким образом, решение, которое не подходит для обоих, прекрасно (возможно, даже более тонкое).
Суб >