Prolog/Primi passi: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Robot: Automated text replacement (-([^'])a'([^']) +\1à\2) |
m Robot: Automated text replacement (-([^'])e'([^']) +\1è\2) |
||
Riga 5:
Umano(john).
Sii preciso, la maiuscola
Adesso avvia l'interprete di prolog. Molti interpreti di prolog mostrano una finestra con un sacco di informazioni seguite da una linea come quella qui sotto:
Riga 22:
['c:/my documents/prolog/prolog1.pl'].
L'interprete dovrebbe comunicarti che il file
?-
Riga 72:
parente(suzie, eliza).
Osserva il punto '.' dietro ogni linea per mostrare la fine della stessa. Questo
Dovreesti anche essere consapevole che i nomi scelti per i predicatied i termini non dicono assolutamente nulla all'interprete di prlog. Devono essere scelti per consentire di comprendere bene il programma , la[[w:leggibilità|leggibilità]]. Potremmo sostituire facilmente la parola ''umano'' con qualsiasi altra parola e l'interprete non ne vedrebbe la differenza.
Riga 91:
No.
Questo sembrerà noiosamente ovvio, ma
Nota: se chiedi a prolog
?- umano(david).
Prolog risponderà No
== Variabili ==
Quello che stiamo facendo non
umano(A).
Adesso il termine del predicato
?- umano(A).
Riga 112:
A = john
Verà
A = suzie ;
Riga 119:
Dopo eliza, prolog risponde No, indicando che le possibilità ulteriori si sono esaurite.
Se prolog viene interrogato con piu' di una variabile esso mostrerà tutte le istanze delle variabili per la quale l'interrogazione
<pre><nowiki>
?- parent(Parent, Child).
Riga 135:
</nowiki></pre>
Quando prolog riceve una domanda con una variabile controlla tutte le linee del programma, e cerca di ''unificare'' ogni predicato con la domanda. Questo signifixa che controllerà se la domanda coincide con il predicato quando le variabili vengono istanziate in un certo modo. Prolog puo' unificare '''umano(A)''' con '''umano(john)''' mettendo insieme A e john, ma non puo' mettere insieme '''uomo(A)''' con '''umano(john)''',
Per rendere le cose un po' difficili a prolog possiamo usare due predicati nella stessa domanda, per esempio:
Riga 141:
?- umano(A), parent(B,A).
</nowiki></pre>
Adesso stiamo chiedendo a prolog se c'e un umano A che ha un parente B. The comma significa ''and'', indicando che entrambi i predicati necessitano di essere veri
Nell'esempio precedente prolog trova '''umano(david)''' nel programma ed unifica A con david. Per verifivare il secondo predicato, crea una istanza per '''parent(B, david)'''. Se non trova nulla cerca una nuova istanza per umano(A). Poi tenta A = john. Quindi istanzia parent(B, john). Trova B = david nella linea parent(david, john) e quindi risulta
Riga 150:
Se premi il punto e virgola cercherà una nuova istanza per il secondo predicato. Se fallisce trova una nuova istanza per il primo e cosi' fino alla fine del database.
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
<pre><nowiki>
?- parent(A, _).
Riga 172:
?- umano(abc)
</nowiki></pre>
sarebbe vera . In questo contesto la variabile anonima
La prossima sezione tratterà di questo.
Riga 184:
</center>
Questa sezione tratta delle regole
== Regole ==
Siamo molto lontani da una vera e propria programmazione ,abbiamo appena definitto degli oggetti e le loro proprietà. Il primo passo per programmare in prolog
a :- b, c, d.
Questo significa che a
a :- b, c, d.
Riga 200:
e.
e chiediamo a prolog se a
<pre><nowiki>
?- a.
</nowiki></pre>
prolog prenderà a (o obiettivo o '''goal''') a e genererà i sottobiettivi o ''sub-goals'' b, c and d.Possiamo vedere che b e c sono veri, diretamente, dal momento che sono fatti, mentre d
== Regole con Variabili ==
Riga 212:
car(corvette) :- haruote(corvette), hafinestrini(corvette).
stabilisce che una corvette
car(corvette).
Noi possiamo comunque usare le variabili nelle regole. Cosi' peresempio possiamo stabilire che un oggetto
car(A) :- haruote(A), hafinestrini(A).
Riga 222:
hafinestrini(corvette).
La prima linea stabilisce che
?- car(corvette).
legherà A a corvette, e otterrà i subgoal '''haruote(corvette)''' e '''hafinestrini(corvette)'''. Se proviamo queste affermazioni allora car(corvette) dev'essere vera.
Quando usiamo le variabili in un programma dobbimo ricordarci che una variabile non significa niente senza la sentenza ad essa legata. Se due affermazioni usano la stessa variabile A, non
bird(A) :- hapiume(A).
Riga 251:
mother(X,Y) :- parent(X,Y), woman(X).
Chiediamo a prolog chi
?- father(X, eliza).
|