Чувствительность порядка списка - PullRequest
0 голосов
/ 03 января 2011

Учитывая факт

likes([apples, oranges], john).

как я могу запросить

 likes([apples, oranges], Who).

и

likes([oranges, apples], Who).

и получить такой же результат?

Ответы [ 2 ]

3 голосов
/ 03 января 2011

Если вы не хотите сортировать, я бы сделал что-то вроде этого:

Файл:

likes([apples, oranges], jo).

likes_find([],_).
likes_find([Head | Tail] , Who):-
    likes(List1 , Who),
    member(Head , List1),
    likes_find(Tail ,Who).

Тест:

?- likes_find([oranges,apples],X).
X = jo .

?- likes_find([oranges,apples,fail_here_plz],X).
false.

?- likes_find([oranges],X).
X = jo .

?- likes_find([oranges,apples],jo).
true .

?- likes_find([apples,oranges],jo).
true .
1 голос
/ 03 января 2011

Если в likes/2 первый (список) аргумент всегда сортируется вручную и не содержит повторений, запрос выполняется с использованием

likes_list(Stuff,Person) :- sort(Stuff,Sorted), likes(Sorted,Person).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...