logo

Programes pròlegs

Utilitzar els predicats integrats, la seqüència d'objectius o especificar un objectiu a l'indicador del sistema tindria poc valor en si mateix. Per escriure un programa Prolog, en primer lloc, l'usuari ha d'escriure un programa escrit en el llenguatge Prolog, carregar aquest programa i, a continuació, especificar una seqüència d'un o més objectius a l'indicador.

Per crear un programa a Prolog, la manera senzilla és escriure'l a l'editor de text i després desar-lo com a fitxer de text com prolog1.pl .

L'exemple següent mostra un programa senzill de Prolog. El programa conté tres components, que es coneixen com a clàusules. Cada clàusula s'acaba amb un punt.

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

Utilitzant el predicat integrat ' consultar' , el programa anterior es pot carregar al sistema Prolog.

?-consult('prolog1.pl').

Això mostra que el fitxer prolog1.pl existeix i que el programa pròleg és sistemàticament correcte, el que significa que té clàusules vàlides, l'objectiu tindrà èxit i, per confirmar que el programa s'ha llegit correctament, produeix una o més línies de sortida. per exemple.,

?-
# 0,00 segons per consultar prolog1.pl
?-

llista de matrius

L'alternativa de 'consultar' és 'Carregar', que existirà a l'opció de menú si el sistema Prolog disposa d'una interfície gràfica d'usuari.

Quan es carregui el programa, la clàusula es col·locarà en una àrea d'emmagatzematge, i aquesta àrea d'emmagatzematge es coneix com a base de dades Prolog. En resposta a la sol·licitud del sistema, especifiqueu una seqüència d'objectius i provocarà que Prolog cerqui i utilitzi les clàusules necessàries per avaluar els objectius.

Terminologia

Al programa següent, tres línies mostren les clàusules.

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

Mitjançant el punt, es donarà per acabada cada clàusula. Els programes pròlegs tenen una seqüència de clàusules. Els fets o les regles es descriuen en aquestes clàusules.

Exemple de fets és gos (rottweiler) i gat (munchkin) . Volen dir que ' rottweiler és un gos' i ' munchkin és un gat'.

El gos s'anomena predicat. El gos conté un argument. paraula ' rottweiler' tancat entre parèntesis (). El rottweiler s'anomena àtom.

L'exemple de regla és la línia final del programa.

 animal(A) :- dog(A). 

El caràcter de dos punts(:-) es llegirà com 'si'. Aquí A és una variable i representa qualsevol valor. D'una manera natural, la regla es pot llegir com 'Si A és un animal, llavors A és un gos'.

La clàusula anterior mostra que el rottweiler és un animal. Aquesta deducció també es pot fer mitjançant Prolog:

?- animal (rottweiler).

Per implicar això munchkin és un animal, no hi ha proves d'això.

?- animal (monchkin).
no

Més terminologia

L'avaluació d'un terme d'objectiu determina si es compleix o no. També vol dir que l'objectiu s'avalua com a vertader o fals.

Tingueu en compte que quan un usuari introdueix un objectiu, de vegades es pot interpretar com una ordre. Per exemple,

?- aturar-se. 'S'utilitza per sortir del sistema Prolog.'

De vegades es pot considerar com una pregunta com,

?- animal (rottweiler). & 'El rottweiler és un animal?'

El programa següent mostra un altre exemple sobre animals. Consta de vuit clàusules. El comentari es mostra per tot el text entre /* i */.

 /* 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.*/ 

El predicat gos i el predicat gat tenen quatre clàusules. Suposem que en un fitxer de text 'animal.pl', el programa s'ha desat i la sortida es genera carregant el programa i a l'indicador del sistema, estem introduint una seqüència d'objectius de la següent manera:

?- consultar('animals1.pl'). Indicador del sistema
# 0,01 segons per consultar animals.pl animals.pl carregat amb la consulta

?- gos (rottweiler).

?- gos (boxer).
no

?- gos (A).
A = rottweiler fa una pausa: l'usuari prem la tecla de retorn

?- gos (B).
B = rottweiler; pauses? premses de l'usuari;
B = caniche; pauses? premses de l'usuari;
B = bulldog; pauses? premses de l'usuari;
B = dobermann Sense pausa? Passarà a la línia següent

?- gat (A). A = esfinx; pausa? premses d'usuari;
A = Bengala s'atura? l'usuari prem tornar

?- escoltant (gos). Enumerarà totes les clàusules que defineixen el predicat gos

/* gos/1 */

gos (rottweiler).
gos (caniche).
gos (buldog).
gos (dobermann).

?-

En aquest exemple, s'introdueixen diverses funcions noves de Prolog. La consulta és la següent:

?- gos (A).

Vol dir que trobeu el valor de la A, i serà el nom del gos. La resposta de Prolog és la següent:

A = rottweiler

Altres possibles respostes de A són les següents, caniche, bulldog, dobermann. Provocarà la pausa del Pròleg i, per això, haurem d'esperar que l'usuari premeu la tecla 'retorn' abans que entri l'indicador del sistema ?-.

Podem introduir la següent consulta de la següent manera:

?- gos (B).

Aquesta consulta és la mateixa que abans. La consulta anterior significa que 'cerqueu el valor de la B i serà el nom d'un gos'. La resposta de Prolog és la següent:

B = rottweiler

uri vs url

El pròleg es tornarà a aturar. Aquesta vegada l'usuari prem la tecla punt i coma (;). Ara Prolog trobarà un valor alternatiu de B que satisfà el gos objectiu (B). Li respondrà de la següent manera:

B = caniche

El pròleg es tornarà a aturar. L'usuari torna a prémer la tecla punt i coma (;). Prolog produeix una solució addicional de la següent manera:

B = bulldog

El pròleg es tornarà a aturar. L'usuari torna a prémer la tecla punt i coma (;). Prolog produeix una solució addicional de la següent manera:

B = dobermann

Prolog reconeix que no hi ha més solució disponible en no fer una pausa, però el sistema indica?- passant immediatament a la sortida.

En aquest exemple s'introdueix un nou predicat integrat. Especificació de l'objectiu

?- llistat (gos)

En l'objectiu anterior, Prolog enumerarà les quatre clàusules que defineixen el gos predicat. Es definiran en el mateix ordre en què s'han carregat a la base de dades.

caràcter en cadena

L'exemple següent mostra l'ús de variables a la consulta. La seqüència de l'objectiu és la següent:

?-gat (A), gos (B).

Això ens donarà totes les combinacions possibles d'un gat i un gos.

?-gat (A), gos (B).
A = esfinx,
B = rottweiler;

A = esfinx,
B = caniche;

A = esfinx,
B = bulldog;

A = esfinx,
B = dobermann;

etc.

En canvi, la seqüència d'objectius és la següent:

?-gat (A), gos (A).

Això donarà tots els animals que són tant un gat com un gos (a la base de dades, no hi ha cap animal). Aquí A és 'qualsevol valor' tant en gat (A) com en gos (A), però tots dos han de tenir el mateix valor.

?-gat (A), gos (A).
no