Problema:
Tre amici hanno ottenuto il primo, il secondo e il terzo posto in un concorso.
1. Ognuno di loro ha nomi diversi, preferisce un altro sport e ha diverse nazionalità.
2. Michael preferisce il basket e ha un posto migliore di quello americano.
3. Simon è israeliano e ha un posto migliore del tennista.
4. Il giocatore di cricket è arrivato per primo.
Scrivi un programma in Prolog per rispondere alle seguenti domande: Chi è australiano,
israeliano, americano? Che sport preferisci un certo atleta?
p([[_,_,cricket,1],[_,_,_,2],[_,_,_,3]]).
appartiene(X, [X | _]).
appartiene(X, [_ | Resto]) :- appartiene(X, Resto).
classifiche(L) :- p(L),
appartiene([michael,_,baschet,A],L), appartiene([_,american,_,B],L),A<B,
appartiene([simon,israelian,_,C],L), appartiene([_,_,tenis,D],L),C<D,
appartiene([richard,_,_,_],L), appartiene([_,australian,_,_],L),!.
nazionalita(X,Y) :- classifiche (L),
appartiene([Y,X,_,_],L),!.
sport(X,Y) :- classifiche (L),
appartiene([X,_,Y,_],L),!.
p([[_,_,cricket,1],[_,_,_,2],[_,_,_,3]]).
Il predicato p viene utilizzato per creare la struttura dell'elenco.
appartiene(X, [X | _]).
appartiene(X, [_ | Rest]) :- appartiene(X, Rest).
Il predicatore appartiene per verificare se un elemento è o meno nella lista.
classifiche(L).
Il predicato classifiche contiene tutti i dati che conosciamo: Michael preferisce il basket, ecc.
nazionalita(X,Y).
Il predicato nazionalità ha due atomi: X che è input e conterrà la nazionalità e Y che è l'uscita in
cui restituirà il nome dell'atleta che corrisponde ai dati di nazionalità.
sport(X,Y).
Il predicato sport ha due atomi: X che è ingresso e conterrà il nome dell'atleta e Y che è l'uscita in
cui lo sport tornerà che l'atleta preferisce.
Chiediamo al prologo: qual è la classifica degli amici?
classifiche (Classifiche).
La risposta del Prolog sarà:
Classifiche = [[simon, israelian, cricket, 1], [michael, australian, baschet, 2], [richard, american,
tenis, 3]]
Chiediamo al prologo: che sport preferiva Simon?
sport(simon, Preferire).
La risposta del Prolog sarà:
Preferire = cricket
Chiediamo al prologo: chi è americano?
nazionalita(american, Chi).
La risposta del Prolog sarà:
Chi = richard