UNIVERSIDAD NACIONAL PEDRO RUIZ GALLO FACULTAD DE CIENCIAS FÍSICAS Y MATEMÁTICAS ESCUELA PROFESIONAL DE COMPUTACIÓN COMPUTACIÓN E INFORMÁTICA INFORMÁTICA INTELIGENCIA ARTIFICIAL
3.
FUNDAMENTOS DE PROLOG................................ PROLOG............................................................................................. ........................................................................................................ ........................................... 2 3.1 PROGRAMACIÓN LÓGICA ...................................................... ................................................................................................................... ..................................................................................... ........................ 3 3.2 PROGRAMAS EN PROLOG .................................................... ................................................................................................................. ..................................................................................... ........................ 3 3.3 COMENTARIOS .................................................... ............................................................................................................... ...................................................................................................... ........................................... 13 4. ENTORNO DE DESARROLLO PROLOG ........................................................ ..................................................................................................................... ............................................................... 13 5. FUNDAMENTOS DE VISUAL PROLOG .......................................................... ....................................................................................................................... ............................................................... 14
Docente: Ing. María Nícida Malca Quispe
1
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
3. FUNDAMENTOS DE PROLOG PROLOG es un lenguaje interpretado basado en la lógica de predicados de primer orden. orden. Puede ser visto como un lenguaje de programación o como un demostrador mecánico de teoremas. Un predicado representa una propiedad o relación de un determinado objeto del universo del discurso. Un predicado de primer orden es aquel que se refiere a propiedades de objetos y relaciones entre ellos: Ejm: rubia(sara). moreno(carlos). novia(sara,carlos). primos(X,Y):-progenitor(A,X),progenitor(B, primos(X,Y):-progenitor(A ,X),progenitor(B,Y),hermanos(A,B). Y),hermanos(A,B). La lógica de predicados de primer orden estudia razonamientos de tipo deductivo, deductivo, exactos (true/false) y basados en predicados de primer orden. Fue implementado a principios de los años 70 por Alain Colmerauer y junto con Lisp son los lenguajes que históricamente se han utilizado para construir aplicaciones en gran parte de las ramas de IA. En Prolog, las soluciones se alcanzan deduciendo lógicamente una cosa de algo ya conocido. Un programa Prolog no es una secuencia de acciones, acciones, sino una colección de hechos, hechos, junto con una secuencia secuencia de reglas para extraer conclusiones a partir de los hechos. Prolog es un lenguaje declarativo, declarativo, lo que significa que un programa escrito en Prolog está mucho más cercano al lenguaje natural natural que los lenguajes imperativos (Basic, C, Pascal, etc). El lenguaje incluye una máquina de inferencia, inferencia, que no es más que un procedimiento pr ocedimiento general para razonar acerca de la información. Esta máquina de inferencia se encarga de responder a las preguntas que se realicen al sistema, intentando deducir la información a partir de los hechos conocidos y de las reglas del programa. Aunque Prolog no permite escribir programas mediante sentencias del lenguaje natural (el compilador sería increíblemente complejo), la sintaxis está bastante cercana. Concretamente, se usa un subconjunto de la lógica de predicados para representar r epresentar la información. Por ejemplo: Lenguaje natural
Lógica de Predicados
Un coche es divertido.
divertido(coche).
Una rosa es roja.
roja(rosa).
A Juan le gusta un coche si es divertido.
gusta(juan,Coche) si divertido(Coche).
Prolog es un lenguaje declarativo e interpretado. interpretado. Esto quiere decir que el lenguaje se usa para representar conocimientos sobre un determinado dominio y las relaciones entre objetos de ese dominio. A partir de ese conocimiento, el propio sistema deduce respuestas a cuestiones que se le planteen, es decir, realiza una inferencia. El dominio lo constituyen un conjunto de objetos, y el conocimiento se formaliza mediante un conjunto de relaciones (reglas) que describen de forma simultánea propiedades de los objetos y sus interacciones.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
La ventaja de este tipo de lenguaje frente a lenguajes procedimentales (como Java, C) es que no hay que preocuparse de cómo resolver algo; la desventaja es que la resolución automática no siempre es eficiente.
3.1 PROGRAMACIÓN LÓGICA La programación lógica implica el uso de:
Hechos y reglas para representar la información Deducciones para responder consultas
Los programadores proporcionamos los hechos y las reglas, reglas, mientras que el lenguaje usa la deducción para calcular respuestas a consultas. consultas. Un programa lógico se configura como un conjunto de hechos (asertos o proposiciones) y de reglas lógicas previamente establecidas, que generan conclusiones conclusiones ya sea a partir de una serie de preguntas o cuestiones lógicas, de modo que tales conjuntos de hechos o asertos y reglas permitirán deducir nuevos hechos. Un programa se estructura de la siguiente forma: Lógica + Control + Estructuras de datos = Programa , donde: A. Lógica: Lógica: Constituida por a. Hechos: Que permiten establecer relaciones entre objetos o propiedades de éstos. Ejemplo: Chita es amiga de Tarzan OBJETOS: Chita y Tarzan RELACION: amiga b. Reglas Lógicas: Expresan que un hecho depende de un grupo de otros hechos. Ejemplo: X es el abuelo paterno de Y si X es el padre de Z Z es el padre de Y B. Control: Control: Inherente al sistema, son las estrategias a seguir para investigar las cuestiones lógicas. Ejemplo: estrategia de búsqueda “primero en profundidad” .
C. Estructura de Datos: Datos: Son los elementos que soportan la base de conocimiento y cuestiones lógicas. Ejemplo: variables, listas, constantes, etc.
3.2
PROGRAMAS EN PROLOG
Los programas en Prolog se componen de cláusulas de Horn que constituyen reglas del tipo "modus ponendo ponens", es decir, "Si " Si es verdad el antecendente, entonces es verdad el consecuente": consecuente ": p1(…) ∧ p2(…) ∧… ∧ pm(…) p(t1, t1, …, tn) Cuerpo: Antecedente
Cabeza: Consecuente
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
No obstante, en Prolog la forma de escribir las cláusulas de Horn es al contrario de lo habitual. Primero se escribe el consecuente y luego el antecedente:
Las reglas son implicaciones lógicas, que pueden tener varios antecedentes pero un único consecuente. Ejemplo humano(X) mortal(X). →
, que utilizando la sintaxis de Prolog se escribe: mortal(X):- humano(X). Las cláusulas de Horn son expresiones condicionales, siendo el símbolo “: -”, el condicional o símbolo de
implicación (normalmente en lógica se utiliza el símbolo ). Así la cláusula anterior podría leerse de la siguiente forma:
Cuando m=0, la cláusula no tiene parte derecha (antecedente), en este caso diremos que se trata de un hecho o afirmación. afirmación.
Los hechos son afirmaciones que consideramos ciertas en el programa. Cuando la cláusula no tiene parte izquierda, se trata de una pregunta; pregunta; este tipo de cláusulas se utilizan para realizar la entrada/salida del programa.
3.2.1 Predicados, Cláusulas y Términos En Prolog un programa programa está constituido por una secuencia secuencia de cláusulas (a veces llamadas fórmulas o sentencias). Estas cláusulas deben representar todo el conocimiento necesario para resolver el problema. Se pueden diferenciar tres tipos de cláusulas: cláusulas: Hechos (afirmaciones): Se puede representar objetos, propiedades de objetos, relaciones entre
objetos. Reglas Consultas/Preguntas
Cada cláusula puede estar formada por instancias de uno o varios predicados. predicados. Las cláusulas deben terminar obligatoriamente en un punto (.) Los predicados expresan una relación entre un conjunto de objetos, denominados términos. términos. Con un predicado podemos representar algo que sucede en el mundo real (hecho), o una r egla (regla de inferencia), que nos permite deducir hechos que suceden s uceden en ese dominio mediante la aplicación de
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Ejemplo, se tienen las siguientes cláusulas (hechos): humano(pepe). humano(juan). Para referenciar este predicado se utiliza únicamente su nombre y aridad: humano/1. humano/1. Cada predicado en Prolog puede estar definido por una o más cláusulas. cláusulas. En el ejemplo, humano/1 está definido por dos cláusulas. cláusulas.
Aridad
Tipo de predicado
0
Representa Hechos simples o
Predicado Llueve/0
Instanciad de predicados llueve.
Proposiciones. 1
Monádico
Propiedades entre objetos.
alto/1 mujer/1 moreno/1 hombre/1
alto(juan). mujer(X). moreno(X). hombre(Y).
>1
Poliádico
Relaciones entre
padre_de/2
padre_de(jose,manuel). padre_de(Padre,Hijo). madre_de(Madre,Hijo). tiene(Per,Obj). le_gusta_a(X,Y). regala(Per1,Obj,Per2).
objetos. madre_de/2 tiene/2 le_gusta_a/2 regala/3
Todas las cláusulas cuyas cabezas tienen el mismo nombre y aridad forman un predicado (o una definición de procedimiento). Por ejemplo, veamos un predicado formado por tres cláusulas, dos de las cuales son hechos y la otra es una regla: elefante(dumbo). elefante(jumbo). elefante(X):-gris(X),mamífero(X),tieneTrompa(X). Nótese que este predicado nos da tres formas distintas de llegar a la conclusión de que X es un elefante; o es dumbo, o es jumbo, o es gris, mamífero y tiene trompa.
Términos
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
3.2.2 Términos Son construcciones simbólicas que representan objetos del universo del discurso, y pueden ser:
Términos simples: constantes simbólicas o numéricas
Ejemplo: a, x, juan, “2” , caso_1, -1.73 Variables Ejemplo: Algo, X, Hombre, _caso_1
Términos estructurados listas funciones
Constantes Dan nombre a objetos concretos del dominio, representan individuos conocidos: juan, maria, 20 Hay dos clases de constantes: átomos y números.
Átomo: Los átomos hacen las funciones de identificadores en Prolog.
Un átomo puede ser cualquier combinación de letras y números (y algunos signos). Comenzar con una letra minúscula. minúscula.
Pueden contener el carácter “_” (subrayado).
Si van entre comillas dobles ( “ ” ), ), puede contener cualquier carácter.
Ejemplo: Válidos
No Válidos
unatomo
un atomo
otro_atomo “Atomo” “2+3”
_otro_atomo Atomo 2+3
“un atomo”
Números:
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Variables Representan objetos cualesquiera del Universo u objetos desconocidos en ese momento, es decir, son las incógnitas del problema. Una variable está: instanciada cuando existe un objeto representado por ella. ella.
no instanciada cuando todavía no se sabe lo que representa la variable.
Cuando una variable es instanciada su contenido no puede cambiar. Una variable puede ser instanciada a cualquier otro término, incluida otra variable. No son equivalentes a las variables en los lenguajes procedurales, sino a las variables lógicas o matemáticas. El nombre de una variable ha de comenzar por una mayúscula o “_”, y puede contener cualquier combinación de letras, números y el carácter subrayado (_). Ejemplo: Suma X2 _32 _ Algo _ El carácter subrayado “ _ ” solamente, es un tipo de variable especial que se denomina variable anónima. anónima. Ésta se utiliza para escribir variables sin necesidad de darles un nombre. Cada aparición del carácter subrayado representa una variable distinta. Esta variable no queda instanciada, pues no necesitaremos su valor. 3.2.3 Hechos, Consultas y Reglas Hechos Los hechos son el mecanismo básico para representar:
Objetos/personas/conceptos. Propiedades de los objetos.
Relaciones entre los objetos.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Por el contrario, en Prolog usamos un símbolo de predicado que contiene (entre paréntesis) los distintos objetos a los que afecta dicho predicado. Por ejemplo, las tres sentencias anteriores se expresarían así: tiene(juan,perro). tiene(elena,coche). tiene(juan,libro). Los hechos no sólo pueden expresar relaciones entre objetos, sino también propiedades de los mismos. Por ejemplo, las sentencias del lenguaje natural “Juan es alto.” o “Elena es rubia.” se expresar ían en
Prolog así: alto(juan). rubia(elena). Los hechos son las sentencias más sencillas. sencillas. Un hecho es una fórmula: p(t1, ..., tn) , e indica que se verifica la relación (predicado (predicado)) p sobre los objetos (términos (términos)) t1, ..., tn. tn. Ejemplos: es_padre(abraham, isaac), es un hecho que indica “Abraham es padre de Isaac” es_hombre(abraham), es un hecho que indica “Abraham es un hombre” suma(3,2,5), es un hecho que indica “la suma de 3 y 2 es 5” Un conjunto de hechos constituye un programa (la forma más simple de programa lógico) lógico) que puede ser visto como una base de datos que describe una situación. situación. Por ejemplo, el siguiente programa refleja la base de datos de las relaciones familiares que se muestran en el siguiente gráfico:
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Algunas consideraciones para definir los hechos: El nombre de los objetos y relaciones empiezan una letra minúscula. minúscula.
Primero se escribe la relación y después los objetos a modo de argumentos (términos), entre paréntesis y separados por comas (,). Se permite “_” para separar caracteres . Al final debe aparecer un punto (.)
Consultas Una vez que se tiene el programa describiendo una situación, se pueden hacer preguntas (consultas) para obtener información acerca de él. Por ejemplo, podemos hacer preguntas al Programa 1 del tipo siguiente:
Estas preguntas sencillas se llaman fines (metas (metas). ). Como puede verse en la lectura de las preguntas, en éstas se consideran las variables cuantificadas existencialmente. existencialmente. También se pueden hacer preguntas más complejas, como CONJUNCIÓN de metas, metas, de la forma:
Reglas Las reglas nos permiten deducir hechos a partir de otros hechos. Por ejemplo, dadas los siguientes hechos:
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Las reglas anteriores se codificarían en Prolog así: tiene(pedro,X):- tiene(juan,X). rubia(ana):- rubia(elena). Las reglas de inferencia se pueden definir como la especificación de una relación entre predicados y argumentos, que permiten plasmar el hecho de que si la parte derecha del predicado se cumple, se cumple la parte izquierda. mbolo “:-” se pronuncia simplemente “ si”, y sirve para separar las dos partes de la regla: El sí mbolo regla: la mbolo “:-” equivale a una implicación de cabeza y el cuerpo. cuerpo. Desde el punto de vista lógico, el sí mbolo derecha a izquierda ().
Las reglas son sentencias de la forma: A :- B1 , ... , Bn. , donde A y cada Bi son predicados. A es la cabeza de la regla y los Bi's componen el cuerpo de la regla. La correspondencia entre símbolos es la siguiente: Lógica de Primer Orden
Prolog
:-
,
;
Ejemplo: Una regla que define la relación “ser hijo ” a partir de las relaciones dadas podría s er:
es_hijo(X,Y) :- es_padre(Y,X), es_hombre(X). , que se leería de la forma: “para cualesquiera X e Y, X es hijo de Y si Y es padre de X y X es hombre" , ya que se corresponde con la fórmula lógica: x y ( (es_padre(y,x) es_hombre(x)) es_hijo(x,y)) De igual forma se definirían otras relaciones mediante reglas: es_hija(X,Y) :- es_padre(Y,X), es_mujer(X). es_abuelo(X,Y) :- es_padre(X,Z), es_padre(Z,Y).
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Otras preguntas y respuestas a este programa serían:
g Como se observa, las reglas de inferencia permiten llevar a cabo la deducción de metas. metas. Para que las reglas de inferencia sean aplicables, en general, deberá existir un conjunto de hechos sobre los que apoyarse para que las demostraciones se puedan realizar. Las metas representan los problemas específicos, específicos, basados en los problemas generales expresados en la base de conocimientos que deseamos que el demostrador automático de teoremas resuelva. Si nos fijamos, para escribir programas en Prolog, Prolog, siempre debemos tener en cuenta que el demostrador resuelve las metas comenzando por los predicados situados en la zona superior (de arriba a abajo), y para cada predicado el proceso de unificación se lleva a cabo de izquierda a derecha.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Las variables que aparecen en el cuerpo de la regla, pero no en la cabeza, están cuantificadas existencialmente.
Significa que para toda pareja de personas, una será el abuelo de otra si existe alguna persona de la cual, el primero es padre y a su vez es padre del segundo.
Las variables que aparecen en las preguntas (metas) están cuantificadas existencialmente. existencialmente.
Pregunta si existe algo que le guste a jorge, ya que utilizamos refutación y por tanto negamos lo que queremos demostrar Conectivos Lógicas Siendo X e Y instancias de predicados, se tiene:
La conjunción “y” (X,Y)
Objetivos separados que Prolog debe satisfacer, uno después de otro, por orden Para que se satisfaga la secuencia se tendrán que satisfacer todos los objetivos.
La disyunción “o” (X;Y)
Tendrá éxito si se cumple alguno de los objetivos que la componen. También la podemos representar poniendo cada miembro de la disyunción en una cláusula aparte .
La negación lógica (not X) NO puede ser representada explícitamente en Prolog. Se puede utilizar el predicado estándar not. not.
La implicación o condicional (:-) Sirve para especificar que un hecho depende de un grupo de otros hechos. Se usa el símbolo “:-”
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Variables Anónimas Cuando sólo deseamos extraer cierta información de una consulta, se usa un tipo especial de variables denominadas variables anónimas. anónimas. En Prolog, una variable anónima se denota por un símbolo de subrayado (“_”).
Por ejemplo, consideremos la siguiente regla: hijo(X) :- padre (X,Y). La regla dice, para toda X, X tiene un u n hijo si X es el padre de alguna Y. Nosotros estamos definiendo la propiedad hijo el cual, no depende del nombre del hijo. Entonces, aquí hay un lugar en donde podemos usar una variable anónima. Si rescribimos la cláusula: hijo(X) :- padre(X,_). Asignación de valores a las Variables En Prolog no existe una instrucción de asignación. Esto resulta una de las diferencias fundamentales entre Prolog y el resto de lenguajes de programación. Las variables en Prolog toman valores al ser “igualadas” a constantes en los hechos o reglas del programa. Hasta el momento en que una variable toma un valor, se dice que está desinstanciada; desinstanciada; cuando ha tomado un valor, se dice que está instanciada (a dicho valor). Sin embargo, una variable sólo permanece instanciada hasta el momento en que obtenemos una solución. Después, se desinstancia, y se procede a buscar nuevas soluciones. En consecuencia, no es posible utilizar las variables de Prolog para almacenar información. información.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Una biblioteca de utilidades. Estas bibliotecas son, en general, muy amplias. Muchos entornos incluyen (afortunadamente) unas bibliotecas standard-ISO que permiten funcionalidades básicas como manipular cadenas, entrada/salida, etc.
Generalmente, los entornos de desarrollo ofrecen extensiones al lenguaje como pueden ser la programación con restricciones, concurrente, orientada a objetos, etc. Existe un standard ISO que dicta las típicas normas con respecto a la sintaxis del lenguaje y a las bibliotecas básicas que se deben ofrecer. Actualmente el standard no contempla todos los aspectos del lenguaje, y además, no todos los entornos siguen el standard al pie de la letra. Por eso, programas que funcionan en unos entornos podrían no funcionar en otros, o lo que es peor, funcionar de forma diferente.
5. FUNDAMENTOS DE VISUAL PROLOG Características del lenguaje Visual Prolog es un lenguaje de programación de quinta generación especialmente orientado al desarrollo de aplicaciones de bases de datos, interfaces basadas en lenguaje natural, parsers y compiladores, sistemas expertos, etc. Los tiempos de desarrollo de una aplicación en Visual Prolog pueden llegar a ser hasta 10 veces menor que en otro lenguaje de programación como C o Pascal, debido al alto nivel de abstracción del lenguaje. Pese a ello, dispone de un compilador capaz de generar código máquina tan eficiente como un buen compilador de C. Por otro lado, Visual Prolog es un lenguaje “abierto”, es decir, permite generar rutinas que se pueden invocar
desde aplicaciones escritas en C, C++ o ensamblador. De forma análoga, una aplicación en Visual Prolog puede invocar rutinas escritas en los lenguajes C, C++, Pascal o ensamblador.
Programas en Visual Prolog
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
La sección goal contiene el objetivo inicial que provoca el comienzo de la ejecución del programa (algo así como el cuerpo principal del programa).
a) La sección “clauses” En la sección clauses se incluyen la definición de hechos y reglas. Una restricción del lenguaje es que todas las cláusulas que definan un mismo predicado deben aparecer consecutivamente en el programa. Una secuencia de cláusulas definiendo un mismo predicado, predicado, se llama un procedimiento. procedimiento. Cuando Prolog intenta resolver un objetivo, comienza a recorrer todas las cláusulas de la sección clauses en el orden de aparición de las mismas. Cada vez que encuentra una cláusula a la que se pueda igualar el objetivo, se anota la posición de la misma para la búsqueda de soluciones alternativas (backtracking). Sintaxis de las reglas mbolo “:-” (que se Una regla está compuesta por dos partes: la cabeza y el cuerpo, separados por el sí mbolo interpreta como un “si”). La sintaxis genérica para una regla es: cabeza :- subobjetivo1, subobjetivo2, ..., subobjetivoN.
Los subobjetivos en el cuerpo de una regla se pueden interpretar como llamadas a procedimiento, las cuales, si tienen éxito, provocarán que ciertas variables se instancien a ciertos valores. Es decir, desde el punto de vista procedural, la regla anterior se interpreta así: “para ejecutar el procedimiento cabeza, hay que ejecutar las llamadas a procedimiento subobjetivo1, subobjetivo2,. . . , subobjetivoN”.
Para ejecutar una regla con éxito, todos los subobjetivos del cuerpo deben de poder ejecutarse también con éxito. Si al menos uno de ellos falla, Prolog intenta la ejecución de otra regla alternativa (si la hay). En esto consiste el mecanismo de backtracking. backtracking.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Los argumentos de un predicado deben pertenecer a un dominio. El dominio puede ser un dominio estándar, o bien un dominio definido en la sección domains. Veamos algunos ejemplos:
Si declaramos un predicado mi predicado en la sección predicates como sigue: predicates
mi_predicado(symbol, mi_predicado(symbol, integer)
, entonces no es necesario declarar los dominios de sus argumentos en la sección domains, ya que symbol e integer son dominios estándar. Sin embargo, si declaramos el predicado así: predicates
mi_predicado(nombre, mi_predicado(nombre, numero) , entonces necesitaremos declarar los dominios nombre y número en la sección domains. Por ejemplo, si queremos definirlos simplemente del tipo symbol e integer, respectivamente, lo haríamos así: domains
nombre = symbol numero = integer predicates
mi_predicado(nombre, mi_predicado(nombre, numero)
El siguiente fragmento de programa muestra una declaración de dominios y predicados algo más compleja: domains
person, activity = symbol symbol
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Podemos darle nombres particulares a ciertos dominios, pese a que éstos ya estén predefinidos (dominios estándar), facilitando la legibilidad del programa, y se detecta un mayor número de errores en tiempo de compilación. Permite declarar estructuras de datos complejas que no están predefinidas.
Por ejemplo, supongamos que queremos declarar un predicado que vamos a usar para escribir la siguiente relación: Paco es un hombre de 45 años.
Usando los dominios estándar, podríamos declarar el siguiente predicado: predicates
persona(symbol, symbol, symbol, integer) Aunque la declaración es correcta, resultaría mucho más legible el código si lo hacemos así: domains
nombre, sexo = symbol edad = integer
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
En general, los dominios integer y unsigned suelen ser suficientes y, además, se adaptan bien a la plataforma en que se esté trabajando. La siguiente tabla muestra el resto de dominios estándar de Visual Prolog:
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Predicados (operadores) de comparación
XY X <= Y
X e Y han de estar estar instanciadas instanciadas a dos valores numéricos; comprueba que la primera sea menor que la segunda. X e Y han de estar estar instanciadas instanciadas a dos valores numéricos; comprueba que la la primera sea mayor que la la segunda. X e Y han han de estar instanciadas instanciadas a dos valores numéricos; numéricos; comprueba que la primera sea sea menor menor o igual que la segunda. X e Y han de estar instanciadas instanciadas a dos valores numéricos; comprueba que la primera sea mayor mayor o igual que la segunda. Unifica X a Y.
X >= Y X=Y
Entrada/Salida estándar
A continuación, se muestran algunos predicados básicos para poder realizar operaciones de entrada/salida desde/sobre el terminal de salida de la computadora. nl
Escribe una línea en blanco (caracter newline) sobre la salida estándar actual.
readln(-Term)
Lee un término desde la entrada estándar del dispositivo.
readreal(-Term) readint(-Term) write(+Term) writef(+Term)
Escribe el término Term sobre la salida estándar.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
constants Dos = 2 , en el programa habrá que emplearla en minúsculas (para evitar que se confunda con una variable). Es decir, escribiremos: goal A = dos, write(A). , y no: goal A = Dos, write(A). (lo que produciría un error).
Pueden aparecer varias secciones de declaración de constantes en un programa, pero ´estas deben declararse siempre antes de la primera vez que se usen. La declaración de una constante es válida desde el punto en el que se define hasta el final del fichero fuente, pero no pueden declararse varias constantes con el mismo identificador.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Una consulta que contiene variables se debe comprender como encontrar los valores que se pueden asignar a la variable para que la consulta sea una consecuencia lógica del programa (verdadero). Las variables tienen aquí un significado distinto al del que tienen en los lenguajes del paradigma imperativo: imperativo: no son una posición de memoria, memoria, sino una incógnita, incógnita, una indeterminación de la identidad de los valores valores que cumplen una relación. En este paradigma de programación, una variable una vez ligada a un valor no puede cambiar de estado.
Sea el siguiente programa: predicates prueba clauses prueba:- Resultado = 3 + 2, write (Resultado), nl,Resultado = 3 - 2, write (Resultado). goal prueba. Donde el predicado write emite por pantalla variables o literales, y nl emite un carácter , ¿qué sucede al ejecutarse? Aparece en pantalla:
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
clauses varon(marcos). varon(nicolas). mujer(victoria). mujer(laura). goal varon(Quien). Al ejecutar el programa anterior, prolog buscará unificar (match) la consulta con las cláusulas. Su respuesta será: Quien= marcos
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
The world’s largest digital library
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
2º Consulta: padre(mirta,juan).