logo

Programmi Prolog

Usare i predicati incorporati, la sequenza degli obiettivi o specificare un obiettivo al prompt del sistema avrebbe di per sé poco valore. Per scrivere un programma Prolog, in primo luogo, l'utente deve scrivere un programma scritto nel linguaggio Prolog, caricare quel programma e quindi specificare una sequenza di uno o più obiettivi al prompt.

Per creare un programma in Prolog, il modo più semplice è digitarlo nell'editor di testo e quindi salvarlo come file di testo come prolog1.pl .

L'esempio seguente mostra un semplice programma di Prolog. Il programma contiene tre componenti, noti come clausole. Ogni clausola termina con un punto.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

Utilizzando il predicato integrato ' consultare' , il programma di cui sopra può essere caricato nel sistema Prolog.

?-consult('prolog1.pl').

Ciò dimostra che il file prolog1.pl esiste e che il programma prolog è sistematicamente corretto, il che significa che ha clausole valide, l'obiettivo avrà successo e per confermare che il programma è stato letto correttamente, produce una o più righe di output. per esempio.,

?-
# 0,00 secondi per consultare prolog1.pl
?-

ordinamento di fusione

L'alternativa a 'consultare' è 'Carica', che sarà disponibile nell'opzione di menu se il sistema Prolog dispone di un'interfaccia utente grafica.

Quando il programma viene caricato, la clausola verrà posizionata in un'area di archiviazione e tale area di archiviazione è nota come database Prolog. In risposta alla richiesta del sistema, specifica una sequenza di obiettivi e Prolog cercherà e utilizzerà le clausole necessarie per valutare gli obiettivi.

Terminologia

Nel programma seguente, tre righe mostrano le clausole.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

Utilizzando il punto ogni clausola verrà risolta. I programmi Prolog hanno una sequenza di clausole. Fatti o regole sono descritti da queste clausole.

Esempio di fatti È cane (rottweiler) E gatto (Munchkin) . Vogliono dire che ' rottweiler è un cane' e ' munchkin è un gatto'.

Il cane è chiamato predicato. Il cane contiene un argomento. Parola ' rottweiler' racchiuso tra parentesi ( ). Rottweiler è chiamato atomo.

L'esempio di regola è la riga finale del programma.

 animal(A) :- dog(A). 

Il carattere due punti(:-) verrà letto come 'se'. Qui A è una variabile e rappresenta qualsiasi valore. In modo naturale, la regola può essere letta come “Se A è un animale, allora A è un cane”.

La clausola di cui sopra dimostra che il rottweiler è un animale. Tale detrazione potrà inoltre essere effettuata da Prolog:

?- animale(rottweiler).

Per implicarlo munchkin è un animale, non ci sono prove di ciò.

?- animale(Munchkin).
NO

Più terminologia

La valutazione di un termine obiettivo determina se è soddisfatto o meno. Significa anche che l'obiettivo viene valutato come vero o falso.

Tieni presente che quando un utente inserisce un obiettivo, a volte può essere interpretato come un comando. Per esempio,

?- fermati. 'Viene utilizzato per uscire dal sistema Prolog.'

A volte può essere considerata una domanda del tipo:

?- animale(rottweiler). & 'Il rottweiler è un animale?'

Il seguente programma mostra un altro esempio sugli animali. Comprende otto clausole. Il commento viene mostrato da tutto il testo compreso tra /* e */.

 /* Another Program of Animal */ Dog(rottweiler). cat(sphynx). dog(poodle). dog(bulldog). cat(bengal). dog(dobermann). cat(himalayan). cat(singapura). /* This Prolog program consists of various clauses. It is always terminated using the full stop.*/ 

Il predicato cane e il predicato gatto hanno entrambi quattro clausole. Supponiamo che in un file di testo 'animal.pl' il programma sia stato salvato e che l'output venga generato caricando il programma e al prompt del sistema stiamo inserendo una sequenza di obiettivi come segue:

?- consult('animali1.pl'). Richiesta di sistema
# 0,01 secondi per consultare animali.pl animali.pl caricati utilizzando la consultazione

?- cane(rottweiler).

?- cane(boxer).
NO

?- cane(A).
A = il rottweiler fa una pausa: il tasto Invio viene premuto dall'utente

?- cane(B).
B = rottweiler; pause? l'utente preme ;
B = barboncino; pause? l'utente preme ;
B = bulldog; pause? l'utente preme ;
B = dobermann Nessuna pausa? Andrà alla riga successiva

?- gatto(A). A = sfinge; pausa? pressioni dell'utente;
A = pause del Bengala? l'utente preme Invio

?- ascolto(cane). Elencherà tutte le clausole che definiscono il predicato cane

/* cane/1 */

cane(rottweiler).
cane (barboncino).
cane(bulldog).
cane(dobermann).

?-

In questo esempio vengono introdotte varie nuove funzionalità di Prolog. La domanda è la seguente:

?- cane(A).

Significa che trova il valore della A e sarà il nome del cane. La risposta di Prolog è la seguente:

A = rottweiler

Altre possibili risposte di A sono le seguenti, barboncino, bulldog, dobermann. Ciò causerà la pausa del Prolog e, per questo motivo, dovremo attendere che l'utente prema il tasto 'Invio' prima che venga visualizzato il prompt di sistema ?-.

Possiamo inserire la query successiva come segue:

?- cane(B).

Questa query è la stessa di prima. La query precedente significa che 'trova il valore della B e sarà il nome di un cane'. La risposta di Prolog è la seguente:

B = rottweiler

numero di Armstrong

Prolog verrà nuovamente messo in pausa. Questa volta il tasto punto e virgola (;) viene premuto dall'utente. Ora Prolog cercherà un valore alternativo di B che soddisfi il cane obiettivo(B). Risponderà come segue:

B = barboncino

Prolog verrà nuovamente messo in pausa. Il tasto punto e virgola (;) viene nuovamente premuto dall'utente. Prolog produce un'ulteriore soluzione come segue:

B = bulldog

come convertire una stringa in un numero intero Java

Prolog verrà nuovamente messo in pausa. Il tasto punto e virgola (;) viene nuovamente premuto dall'utente. Prolog produce un'ulteriore soluzione come segue:

B = dobermann

Prolog riconosce che non esiste più una soluzione disponibile non mettendo in pausa, ma il sistema chiede ?- passando immediatamente all'output.

In questo esempio viene introdotto un nuovo predicato integrato. Specificare l'obiettivo

?- elenco(cane)

Nell'obiettivo di cui sopra, Prolog elencherà tutte e quattro le clausole che definiscono il predicato dog. Verranno definiti nello stesso ordine in cui sono stati caricati nel database.

L'uso delle variabili nella query è illustrato nell'esempio seguente. La sequenza degli obiettivi è la seguente:

?-gatto(A),cane(B).

Questo ci darà tutte le possibili combinazioni di un gatto e un cane.

?-gatto(A),cane(B).
A = sfinge,
B = rottweiler;

A = sfinge,
B = barboncino;

A = sfinge,
B = bulldog;

A = sfinge,
B = dobermann;

eccetera.

Al contrario, la sequenza degli obiettivi è la seguente:

?-gatto(A), cane(A).

Questo darà tutti gli animali che sono sia un gatto che un cane (nel database non esiste tale animale). Qui A è 'qualsiasi valore' sia in cat(A) che in dog(A), ma entrambi devono avere lo stesso valore.

?-gatto(A),cane(A).
NO