2011-01-03 4 views
0

Gegeben TatsacheListe, um die Empfindlichkeit

likes([apples, oranges], john). 

wie konnte ich

likes([apples, oranges], Who). 

und

likes([oranges, apples], Who). 

und erhalten gleiche Ergebnis abfragen?

+1

Haben Sie etwas versucht? – Muggen

+0

@Muggen: noch nicht – qutron

Antwort

1

Wenn in likes/2, die erste (Liste) Argument wird immer manuell sortiert und enthält keine Wiederholungen, Abfrage mit

likes_list(Stuff,Person) :- sort(Stuff,Sorted), likes(Sorted,Person). 
3

Wenn Sie nicht sortieren wollen, ich so etwas tun würde:

Datei:

likes([apples, oranges], jo). 

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

Test:

?- 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 . 
Verwandte Themen