Prolog/Primi passi: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 102:
== Variabili ==
 
Quello che stiamo facendo non è un vero e prorio linguaggio espressivo. Possiamo aumentare l'espresivitàespressività di un linguaggio utilizzando le ''variabili'' nel nostro percorso di apprendimento. UNa variabile è una parola, proprio come termini e predicati, con l'eccezione che inizia con la lettera maiuscola ed ha dopo di sè lettere sia maiuscole che minuscole. Considera la seguente interrogazione:
 
umano(A).
Riga 114:
A = john
 
VeràVera perché il database contiene la linea '''umano(john)'''. Se premi invio, prolog risponderà Yes e rimanderà il cursore. Se premi il punto e virgola (';') prolog mostrerà il resto delle possibilità:
 
A = suzie ;
Riga 137:
</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 signifixasignifica che controllerà se la domanda coincide con il predicato quando le variabili vengono istanziate in un certo modo. Prolog può unificare '''umano(A)''' con '''umano(john)''' mettendo insieme A e john, ma non può mettere insieme '''uomo(A)''' con '''umano(john)''', perché i predicati sono diversi.
 
Per rendere le cose un po' difficili a prolog, possiamo usare due predicati nella stessa domanda, per esempio:
<pre><nowiki>
?- umano(A), parent(B,A).
</nowiki></pre>
Adesso stiamo chiedendo a prolog se c'eè un umano A che ha un parente B. TheLa commavirgola significatra i due predicati equivale a un ''and'', indicando così che entrambi i predicati necessitano di essere veri affinché sia vera la domanda. Per controllare questa domanda, prologProlog troverà un' istanza che renderenda lail primaprimo proposizionepredicato vera tvero, poiquindi cercherà di rendere vero il secondo predicato (conservendosi ldell'istanza del primo). IfTrovato itun canmodo makeper therendere secondla predicateproposizione truevera, trovaeràcome unaltronel modocaso precedente, se premi punto e virgola, Prolog cercherà altre soluzioni provando prima per renderealtre ilistanze del secondo predicato veroe (dopopoi premutoripeterà il puntoprocesso eprovando virgola)per .le Setutte nonle cirimanenti riesce,istanze troveràmodificando unadi secondavolta possibilitàin di renderevolta il primo predicato. vero, prendendo in .
 
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
A = john