SlideShare a Scribd company logo
PROLOG in a
NUTSHELL
Stefan o Dalla Palma
C H E C O S ’ È
PROLOG ?
COSTRUTTIFATTI, REGOLE, QUERY
TERMINI: ATOMI, VARIABILI
SINTASSI
&
ANALIZZATORE SINTATTICO
DELLA LINGUA INGLESE
APPLICAZIONE IN
LINGUISTICA
COMPUTAZIONALE
Programming
logic
Non dire al computer cosa fare…
ma ponigli delle
domande!
Cos’è un
programma?
Cos’è un
programma?
Base di conoscenza
Cos’è un
programma?
Collezione di
FATTI & REGOLE
P R E D I C A T I
PREDICATO
nome(arg1,…,argN)  nome/N
studente(‘Stefano’, ‘Dalla Palma’,’158350’)  studente/3
KB1
uomo(stefano).
uomo(marco).
uomo(alessandro).
donna(virginia).
suonaLaChitarra(stefano).
=> FATTI
Stefano è un uomo?
?-uomo(stefano).
atomi
?-uomo(stefano).
atomi
Una stringa di caratteri che inizia con una lettera
minuscola
atomo – programma – presentazione – slides
1
2 Una sequenza arbitraria di caratteri racchiusi tra apici
‘Atomo’ – ‘questo è un esempio’ – ‘_&hs@#d5%’
3
Una stringa di caratteri speciali: @= – ; – :-
Query
?- uomo(stefano).
KB1
uomo(stefano).
uomo(marco).
uomo(alessandro).
donna(virginia).
suonaLaChitarra(stefano).
KB1
uomo(stefano).
uomo(marco).
uomo(alessandro).
donna(virginia).
suonaLaChitarra(stefano).
Query
?- uomo(stefano).
KB1
uomo(stefano).
uomo(marco).
uomo(alessandro).
donna(virginia).
suonaLaChitarra(stefano).
Query
?-suonaLaChitarra(stefano).
?-suonaLaChitarra(virginia).
Query
?-suonaLaChitarra(stefano).
?-suonaLaChitarra(virginia).
KB1
uomo(stefano).
uomo(marco).
uomo(alessandro).
donna(virginia).
suonaLaChitarra(stefano).
UNIFICAZIONE
Il predicato del fatto è lo stesso della query
u o m o ( s t e f a n o ) . ? - u o m o ( s t e f a n o ) .
Entrambi i predicati hanno la stessa arità
/1
Tutti gli argomenti dei predicati sono gli stessi
u o m o ( s t e f a n o ) . ? - u o m o ( s t e f a n o ) .
1
2
3
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
REGOLE
testa :- corpo
ascoltaMusica(stefano) :- felice(stefano).
Regola : se e solo se

implica
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
Query
?- suonaLaChitarra(stefano).
?- suonaLaChitarra(virginia).
Query
?- suonaLaChitarra(stefano).
?- suonaLaChitarra(virginia).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
«Stefano suona la chitarra?»
?- suonaLaChitarra(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
Query
?- suonaLaChitarra(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
<=
Query
?- suonaLaChitarra(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
<=
Query
?- suonaLaChitarra(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
<=
Query
?- suonaLaChitarra(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
<=
Query
?- suonaLaChitarra(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).<=
Query
?- suonaLaChitarra(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).<=
Query
?- suonaLaChitarra(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
suonaLaChitarra(stefano) :-ascoltaMusica(stefano).
Query
?- suonaLaChitarra(stefano).
<=
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
<=
suonaLaChitarra(stefano) :-ascoltaMusica(stefano).
Query
?- suonaLaChitarra(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
<=
suonaLaChitarra(stefano) :-ascoltaMusica(stefano).
Query
?- suonaLaChitarra(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
<=
suonaLaChitarra(stefano) :-ascoltaMusica(stefano).
Query
?- suonaLaChitarra(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
<=
suonaLaChitarra(stefano) :-ascoltaMusica(stefano).
Query
?- suonaLaChitarra(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
<=
suonaLaChitarra(stefano) :-ascoltaMusica(stefano).
Query
?- suonaLaChitarra(stefano).
ascoltaMusica(stefano) :- felice(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
<=
suonaLaChitarra(stefano) :-ascoltaMusica(stefano).
Query
?- suonaLaChitarra(stefano).
ascoltaMusica(stefano) :- felice(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
<=
suonaLaChitarra(stefano) :-ascoltaMusica(stefano).
Query
?- suonaLaChitarra(stefano).
ascoltaMusica(stefano) :- felice(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
suonaLaChitarra(stefano) :-ascoltaMusica(stefano).
Query
?- suonaLaChitarra(stefano).
ascoltaMusica(stefano) :- felice(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
suonaLaChitarra(stefano) :-ascoltaMusica(stefano).
Query
?- suonaLaChitarra(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
Query
?- suonaLaChitarra(stefano).
I fatti e le regole contenute in
una knowledge base (KB) sono
chiamate clausole!
Clausole:
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
5
CLAUSOLE
2 fatti
3 regole
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
KB2
felice(stefano).
ascoltaMusica(virginia).
ascoltaMusica(stefano) :- felice(stefano).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano).
REGOLA testa :- corpo.
FATTO testa :- .
Un fatto è una regola senza «corpo»
testa :- .
KB3
**fatti**
felice(stefano).
ascoltaMusica(virginia).
**regole**
suonaLaChitarra(stefano) :- ascoltaMusica(stefano) , felice(stefano).
suonaLaChitarra(virginia) :- felice(virginia).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
KB3
**fatti**
felice(stefano).
ascoltaMusica(virginia).
**regole**
suonaLaChitarra(stefano) :- ascoltaMusica(stefano) , felice(stefano).
suonaLaChitarra(virginia) :- felice(virginia).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano) , felice(stefano).
AND
GOALS
AND:
«Stefano suona la chitarra?»
?- suonaLaChitarra(stefano).
Query
?- suonaLaChitarra(stefano).
KB3
**fatti**
felice(stefano).
ascoltaMusica(virginia).
**regole**
suonaLaChitarra(stefano) :- ascoltaMusica(stefano) , felice(stefano).
suonaLaChitarra(virginia) :- felice(virginia).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano),
felice(stefano).
Query
?- suonaLaChitarra(stefano).
KB3
**fatti**
felice(stefano).
ascoltaMusica(virginia).
**regole**
suonaLaChitarra(stefano) :- ascoltaMusica(stefano) , felice(stefano).
suonaLaChitarra(virginia) :- felice(virginia).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(stefano) :- ascoltaMusica(stefano),
felice(stefano).
Query
?- suonaLaChitarra(stefano).
KB3
**fatti**
felice(stefano).
ascoltaMusica(virginia).
**regole**
suonaLaChitarra(stefano) :- ascoltaMusica(stefano) , felice(stefano).
suonaLaChitarra(virginia) :- felice(virginia).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
KB3
**fatti**
felice(stefano).
ascoltaMusica(virginia).
**regole**
suonaLaChitarra(stefano) :- ascoltaMusica(stefano) , felice(stefano).
suonaLaChitarra(virginia) :- felice(virginia).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(virginia) :- felice(virginia) ; ascoltaMusica(virginia).
OR
GOALS
suonaLaChitarra(virginia) :- felice(virginia).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).OR:
Query
?- suonaLaChitarra(virginia).
KB3
**fatti**
felice(stefano).
ascoltaMusica(virginia).
**regole**
suonaLaChitarra(stefano) :- ascoltaMusica(stefano) , felice(stefano).
suonaLaChitarra(virginia) :- felice(virginia).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(virginia) :- felice(virginia).
<=
KB3
**fatti**
felice(stefano).
ascoltaMusica(virginia).
**regole**
suonaLaChitarra(stefano) :- ascoltaMusica(stefano) , felice(stefano).
suonaLaChitarra(virginia) :- felice(virginia).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(virginia) :- felice(virginia).
<=
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
Query
?- suonaLaChitarra(virginia).
KB3
**fatti**
felice(stefano).
ascoltaMusica(virginia).
**regole**
suonaLaChitarra(stefano) :- ascoltaMusica(stefano) , felice(stefano).
suonaLaChitarra(virginia) :- felice(virginia).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(virginia) :- felice(virginia).
<=
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
Query
?- suonaLaChitarra(virginia).
KB3
**fatti**
felice(stefano).
ascoltaMusica(virginia).
**regole**
suonaLaChitarra(stefano) :- ascoltaMusica(stefano) , felice(stefano).
suonaLaChitarra(virginia) :- felice(virginia).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
suonaLaChitarra(virginia) :- felice(virginia).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
Query
?- suonaLaChitarra(virginia).
<=
Query
?- suonaLaChitarra(virginia).
KB3
**fatti**
felice(stefano).
ascoltaMusica(virginia).
**regole**
suonaLaChitarra(stefano) :- ascoltaMusica(stefano) , felice(stefano).
suonaLaChitarra(virginia) :- felice(virginia).
suonaLaChitarra(virginia) :- ascoltaMusica(virginia).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
=> Predicati
binari
«Ci sono donne? Se si, chi sono?»
?- donna(X).
«Ci sono donne? Se si, chi sono?»
?- donna(X).
Variabile
VARIABILI
Qualsiasi stringa che inizia con una
lettera maiuscola o un _ (underscore)
Variabile – Programma - _G302
Query
?- donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
Query
?- donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
<=
Query
?- donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
<=
Query
?- donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
<=
Query
?- donna(X).
X = paola ;
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
<=
; = cerca alternative
. = ferma il programma
Query
?- donna(X).
X = paola ;
X = antonella
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
<=
Query
?- donna(X).
X = paola ;
X = antonella ;
false.
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia). <=
«C’è qualche individuo X tale che
Marco ama X …
?- ama(marco, X), donna(X).
… e X è donna?»
Query
?- ama(marco,X) , donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
Query
?- ama(marco,X) , donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
?- ama(marco, X) AND ?-donna(X)
Query
?- ama(marco,X) , donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
?- ama(marco, X) AND ?-donna(X)
<=
Query
?- ama(marco,X) , donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
?- ama(marco, paola) AND ?-donna(paola)
<=
Query
?- ama(marco,X) , donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
X = paola
Query
?- ama(marco,X) , donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
X = paola
;
paola? marco
Chi è l’amante di Marco?
Query
?- ama(marco,X) , donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
?- ama(marco, X) AND ?-donna(X)
<=
Query
?- ama(marco,X) , donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
<=
?- ama(marco, gelato) AND ?-donna(gelato)
Query
?- ama(marco,X) , donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
<=
?- ama(marco, gelato) AND ?-donna(gelato)
Query
?- ama(marco,X) , donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
<=
?- ama(marco, gelato) AND ?-donna(gelato)
Query
?- ama(marco,X) , donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
<=
?- ama(marco, gelato) AND ?-donna(gelato)
Query
?- ama(marco,X) , donna(X).
KB4
uomo(stefano).
uomo(marco).
donna(paola).
donna(antonella).
ama(marco, paola).
ama(marco, gelato).
ama(alessandro,virginia).
X = paola
false.
;
PROLOG
PROGRAMMA
Base di
conoscenza
Queries
CLAUSOLE
Insieme di FATTI
e di REGOLE
UNIFICAZIONE
Meccanismo di
pattern matching
Predicati
TERMINI
Atomi e
Variabili
ANALIZZATORE SINTATTICO
DELLA LINGUA INGLESE
APPLICAZIONE IN
LINGUISTICA
COMPUTAZIONALE
DCG
Definite Clause Grammars
DCG
Definite Clause Grammar
Regole DCG:
testa --> corpo.
Regole Prolog:
testa :- corpo.
DCG
Definite Clause Grammar
Regole DCG:
testa --> corpo.
Termine
No variabile
Sequenza di simboli
terminali e non terminali
separati dalla , (virgola)
DCG
Definite Clause Grammar
frase(Soggetto) --> soggetto(Soggetto),
[è],
oggetto.
argomento non terminaliterminale
TESTA CORPO
Il linguaggio
L = {a b , n>0}
è generato dal seguente programma:
s --> [a],s,[b].
s --> [a],[b].
n n
Il linguaggio
L = {a b , n>0}
è generato dal seguente programma:
s --> [a],s,[b].
s --> [a],[b].
n nab
aabb
aaabbb
…
aaaa…bbbb
«stefano writes the program»
«stefano writes a program»
«a program halts»
«the program halts»
«stefano writes the program»
«stefano writes a program»
«a program halts»
«the program halts»
NP VP
s --> np, vp.
det n iv
«stefano writes the program»
«stefano writes a program»
«a program halts»
«the program halts»
pn tv NP
s --> np, vp.
np --> pn.
np --> det, n.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
iv
«stefano writes the program»
«stefano writes a program»
«a program halts»
«the program halts»
tv NP
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
Lista
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<= Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<= Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<= Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<=
Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
<= Queries
?- s([stefano, writes, the, program], []).
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
Queries
?- s([stefano, writes, the, program], []).
true
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
Queries
?- s([stefano, writes, the, program], []).
?- s([stefano, writes, a, program], []).
?- s([the, program, halts], []).
?- s([a, program, halts], []).
?- s([stefano, writes, stefano], []).
true
true
true
true
false
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
Queries
?- s(X,[]).
X = [stefano, writes, stefano].
X = [stefano, writes, the, program].
X = [stefano, writes, a, program].
X = [stefano, halts].
X = [the, program, writes, stefano].
X = [the, program, writes, the, program].
X = [the, program, writes, a, program].
X = [the, program, halts].
X = [a, program, writes, stefano].
X = [a, program, writes, the, program].
X = [a, program, writes, a, program].
X = [a, program, halts].
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
det --> [the].
det --> [a].
n --> [program].
tv --> [writes].
iv --> [halts].
Queries
?- s(X,[]).
X = [stefano, writes, stefano].
X = [stefano, writes, the, program].
X = [stefano, writes, a, program].
X = [stefano, halts].
X = [the, program, writes, stefano].
X = [the, program, writes, the, program].
X = [the, program, writes, a, program].
X = [the, program, halts].
X = [a, program, writes, stefano].
X = [a, program, writes, the, program].
X = [a, program, writes, a, program].
X = [a, program, halts].
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
pn --> [stefano].
pn --> [antonio].
pn --> [marco].
pn --> [alessandro].
pn --> [virginia].
pn --> [antonella].
det --> [the].
det --> [a].
det --> [an].
det --> [some].
det --> [every].
n --> [program].
n --> [car].
n --> [book].
n --> [robber].
n --> [man].
n --> [woman].
n --> [device].
n --> [radio].
n -->
[resturant].
n --> [student].
n -->
[professor].
tv --> [love].
tv --> [like].
tv --> [hate].
tv --> [write].
tv --> [read].
tv --> [ran].
tv --> [dates].
tv --> [buy].
iv --> [halts].
iv --> [stops].
iv --> [run].
iv --> [runs].
iv --> [bite].
iv --> [bites].
…
228milaLEPAROLEDELLALINGUAINGLESE
s --> np, vp.
np --> pn.
np --> det, n.
vp --> tv, np.
vp --> iv.
det --> [D] , {lexicon(det, D)}.
n --> [N] , {lexicon(noun, N)}.
pn -->[PN] , {lexicon(pn, PN)}..
iv -->[IV] , {lexicon(iv, IV)}..
tv -->[TV] , {lexicon(tv, TV)}..
lexicon.pl
lexicon(pn, stefano). lexicon(pn, mario).
lexicon(pn, giuseppe). lexicon(pn, marco).
lexicon(pn, mario). lexicon(pn, alessandro).
lexicon(pn, virginia). lexicon(pn, antonella).
lexicon(det, the). lexicon(det, a).
lexicon(det, an). lexicon(det, some).
lexicon(det, every). lexicon(noun, program).
lexicon(noun, book). lexicon(noun, car).
lexicon(noun, apple). lexicon(noun, woman).
lexicon(noun, professor). lexicon(tv, writes).
lexicon(tv, ate). lexicon(tv, bought).
lexicon(tv, drives). lexicon(iv, halts).
… … …
«stefano writes a program»
«mario ate the/a apple»
«the/a woman bought a car»
«the/a car starts»
…
«stefano writes giuseppe»
«an apple ate an apple»
…
S t e f a n o D a l l a P a l m a
Link utili
http://www.learnprolognow.org/lpnpage.php?pageid=online (Inglese)
http://www.amzi.com/AdventureInProlog/a1start.php (Inglese)
http://www.ce.unipr.it/research/HYPERPROLOG/prolog.html (Italiano)
http://cs.union.edu/~striegnk/courses/nlp-with-prolog/html/index.html (Natural Language Processing)
Libri e articoli Tools:
The Art Of Prolog Swi-prolog: http://www.swi-prolog.org/
The Birth Of Prolog SWISH: http://swish.swi-prolog.org/
Prolog Furlanzoni (Italiano)
s.dallapalma@studenti.unimol.it

More Related Content

PDF
Design for Testability
PDF
Introduction to Mutation Testing
PDF
Artificial Neural Networks
PDF
Decision Tree learning
PDF
Introduction to Machine Learning with examples in R
PDF
Introduction to Machine Learning concepts
PDF
Apache Mahout Architecture Overview
PDF
An Empirical Study on Bounded Model Checking
Design for Testability
Introduction to Mutation Testing
Artificial Neural Networks
Decision Tree learning
Introduction to Machine Learning with examples in R
Introduction to Machine Learning concepts
Apache Mahout Architecture Overview
An Empirical Study on Bounded Model Checking
Ad

Prolog in a nutshell