Prolog/Primi passi: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
|||
Riga 74:
Osserva il punto '.' dietro ogni linea per mostrare la fine della stessa. Questo è molto importante, se lo dimentichi il tuo interprete non comprenderà il programma.
Se carichiamo il programma sopra illustrato nell'interprete possiamo interrogare il computer. Se digiti
umano(john).
Riga 84:
Yes.
se digiti:
donna(john).
Riga 92:
No.
Questo sembrerà noiosamente ovvio, ma è importante vederlo nel modo giusto. Se chiedi a prolog '''umano(john).''', significa che stai chiedendo a prolog se quest'affermazione è vera. Chiaramente il prolog non può valutare se l'affermazione è vera, semplicemente sta consultando il suo file. Semplicemente controlla che
Nota: se chiedi a prolog:
?- umano(david).
Riga 122:
Se prolog viene interrogato con più di una variabile esso mostrerà tutte le istanze delle variabili per la quale l'interrogazione è vera :
<pre><nowiki>
?-
Parent = david
Riga 140:
Per rendere le cose un po' difficili, possiamo usare due predicati nella stessa domanda, per esempio:
<pre><nowiki>
?- umano(A),
</nowiki></pre>
Adesso stiamo chiedendo a prolog se c'è un umano A che ha un parente B. La virgola tra i due predicati equivale a un ''and'', indicando così che entrambi i predicati necessitano di essere veri affinché sia vera la domanda. Prolog troverà un' istanza che renda il primo predicato vero, quindi cercherà di rendere vero il secondo (servendosi dell'istanza del primo). Trovato un modo per rendere la proposizione vera, come nel caso precedente, se premi punto e virgola, Prolog cercherà altre soluzioni provando prima per altre istanze del secondo predicato e poi ripeterà il processo provando per le tutte le rimanenti istanze modificando di volta in volta il primo predicato.
Nell'esempio precedente prolog trova umano(david) nel programma ed unifica A con david. Per verificare il secondo predicato, crea una istanza per
A = john
Riga 153:
Esiste una variabile speciale chiamata anonima, per la quale viene usata il carattere sottolineatura (_). Quando usi questo carattere in una domanda, significa che non ti importa di come è istanziata la variabile, ie non ti importa a quale termine sia collegata, anche se è collegata a qualcosa. Se chiedi a prolog
<pre><nowiki>
?-
</nowiki></pre>
Prolog risponderà
Riga 165:
?- abc(_,_,_).
</nowiki></pre>
Questo non sarà vero per default, prolog ha bisogno di un'istanza per tutte le tre variabili anonime nel database, come abc(d,e,f). Puoi usare anche la variabile anonima nel tuo database. Ponendo
umano(_).
Nel tuo archivio si avrà che ogni termine,esista o meno, sarà umano. Così la domanda:
<pre><nowiki>
?- umano(abc)
Riga 207:
car(corvette) :- haruote(corvette), hafinestrini(corvette).
stabilisce che una corvette è un'auto se ha ruote e finestrini. Questa non è una affermazione molto utile, potremmo semplicemente stabilire che una corvette è una macchina con:
car(corvette).
Riga 217:
hafinestrini(corvette).
La prima linea stabilisce che affinché auto(A) sia vera, ha ruote(A) e ha finestrini(A) devono essere veri. Se chiediamo a prolog se la corvette è una macchina con
?- car(corvette).
Riga 231:
Ritorniamo ora al nostro programma originale e aggiungiamo qualche regola.
umano(john).
umano(suzie).
umano(eliza).
Chiediamo a prolog chi è il padre di eliza:
?-
X = john ;
Riga 255:
Ora metti tutti i padri nel database con i loro rispettivi figli:
?-
Father = david
Riga 267:
Adesso le madri
?-
Mother = suzie
Riga 275:
== Esempi ==
?-
== Esercizi ==
|