Está en la página 1de 21

Visual Prolog

Haga clic para modificar el estilo de subttulo del patrn


8/19/12

8/19/12

Prolog

se desarroll en la Universidad de Marsella, Francia por Alain Colmerauer en los tempranos 1970s como una herramienta para Programacin en la Lgica. Es un leguaje declaratorio, en base ahechos necesarios y reglas, Prolog usar el razonamiento deductivo para resolver sus problemas de la programacin

8/19/12

Prolog

A diferencia de lenguajes estructurales: algoritmos, traducir a programas Prolog es definir el problema y identificar claramente las reglas, y prolog determinar la solucin.

8/19/12

Para qu se utiliza prolog?

Las principales aplicaciones para las que el lenguaje resulta particularmente adecuado son: Desarrollo de prototipos. Construccin de interfaces para el lenguaje natural, permitiendo extender as las aplicaciones existentes con una interfaz mucho ms amigable. Implementacin de Bases de Datos, empleando el mismo lenguaje de programacin para el desarrollo de la aplicacin y para la gestin de la BD.

8/19/12

En qu es diferente prolog?

Prolog es declarativo: en lugar de especificar paso a paso como debe trabajar el ordenador, un programa Prolog consta de una descripcin del problema. Prolog usa hechos y reglas, es decir, un programa est formado por una lista de sentencias lgicas. Prolog puede realizar deducciones a partir de los hechos y reglas del programa. El control en la ejecucin de un programa Prolog

Secciones de un programa en Visual Prolog

8/19/12

Directivas de compilacin: que se dan al comienzo del programa. Seccin de constantes: puede contener cero, una o varias constantes. Seccin de dominios: puede contener cero, uno o varios dominios. Seccin de la base de datos: puede contener cero, uno o varios predicados de la base de datos. Seccin de predicados: puede contener cero, una

Directivas de compilacin

8/19/12

Nos permiten controlar las caractersticas del compilador. Estas directivas pueden ser cambiadas a travs

Men Opciones de lnea de comando propio cdigo fuente.

(En caso de activar una misma directiva de forma distinta en el entorno prevalece la activacin realizada en el cdigo fuente)

8/19/12

Seccin de constantes

En la seccin de constantes podemos declarar constantes simblicas que pueden usarse en el cuerpo del programa. Sirven para facilitar el uso de diversas cantidades, expresiones y smbolos.

CONSTANTS <Nombre Constante> = <Definicin de Macro>.

Las restricciones en el uso de 8/19/12 constantes

El sistema no distingue entre maysculas y minsculas. La definicin de una constante no puede referirse a s misma. Puede haber varias secciones CONSTANTS a lo largo del programa. Toda constante debe ser definida antes de ser utilizada. Las constantes declaradas son efectivas desde el

8/19/12

Seccin de dominios

En la seccin DOMAINS se pueden definir dominios no especificados por defecto por Visual Prolog. Cada seccin de dominios debe comenzar con la palabra DOMAINS

DOMAINS ENTERO = Integer

8/19/12

Tipos de dominios

Dominios de Objetos Compuestos Dominios de Objetos Compuestos Functorless Sinnimos de Dominios Estndar Dominios tipo Lista Dominios tipo Predicado

8/19/12

Dominios de Objetos Compuestos


El formato es como sigue: dominio = [reference] [align {byte|word|dword}] declaracion1;[declaracion2];...

dominio: nombre dado al dominio especificado por el usuario. declaracion1; [declaracion2]: declaracin de objetos compuestos alternativos que tienen que tener la forma siguiente: functor([sub_1 [, sub_2, ...] ]) donde functor es el nombre del objeto compuesto

8/19/12

Dominios de Objetos Compuestos


DOMAINS LECTOR = lee(SYMBOL Nombre, LECTURA Item) LECTURA = libro(SYMBOL Autor, SYMBOL Titulo, SYMBOL Editorial); revista (SYMBOL Titulo, INTEGER Numero)

Dominios de Objetos Compuestos Functorless

8/19/12

En estos dominios podemos definir tipos de objetos que slo se pueden comportar como una nica clase de objetos.

dominio = struct [align {byte|word|dword}] declaracion Ejemplo: DOMAINS ESCULT = struct escultura (INTEGER ns, SYMBOL autor, SYMBOL material)

8/19/12

Sinnimos de Dominios Estndar

Es til definir sinnimos de dominios que son estndar, para una mayor legibilidad del programa

DOMAINS ENTERO = integer ESCULT = struct escultura (ENTERO ns, SYMBOL autor, SYMBOL material) PINTURA = struct cuadro (ENTERO ns, SYMBOL autor, SYMBOL tecnica)

8/19/12

Dominios tipo Lista

Las listas son estructuras comunes de datos en Prolog consideradas como una forma de objeto compuesto. Son secuencias de elementos generalmente homogneos. Sin embargo, en Visual Prolog es fcil crear listas heterogneas mediante el uso eficaz de declaracin de dominios. La sintaxis para crear una lista de objetos es del modo: dominiolista = dominiocomponentes*

8/19/12

Dominios tipo Lista


DOMAINS
listaenteros = integer* listacaracteres = char* listacuadros = cuadro*

DOMAINS
objetos = escultura (ENTERO ns, SYMBOL autor, SYMBOL material); cuadro (ENTERO ns, SYMBOL autor, SYMBOL tecnica)

8/19/12

Dominios tipo Predicado

Un dominio predicado (dominio puntero a predicado), permite la declaracin de un grupo o una clase de predicados. La sintaxis es como sigue:

PredicadoDom = TipoPredicado [Retorno] (ListaArg) [- [[TipoPredicado] patron]] [lenguaje] donde: PredicadoDom es el nombre del dominio.

8/19/12

Dominios tipo Predicado


DOMAINS par = pares (INTEGER, INTEGER) listapares = par* listaenteros = integer* unaria = determ INTEGER (INTEGER) - (i) PREDICATES predicadosuma(par, INTEGER) cubo: unaria cuadrado: unaria operacion(listapares, unaria, listaenteros) CLAUSES cubo(E, ECubo):- ECubo=E*E*E. cuadrado(E, ECuadrado):- ECuadrado=E*E. predicadosuma(pares(E1, E2), Suma):- Suma=E1+E2.

Seccin de la base de datos

8/19/12

Visual Prolog no es ms que un conjunto de hechos y reglas. Slo los hechos que se declaran en la seccin FACTS sern dinmicos y podrn ser actualizados en tiempo de ejecucin. La seccin FACTS (tambin llamada DATABASE)

8/19/12

Seccin de la base de datos


[GLOBAL] {FACTS | DATABASE} [- nombre de la base de datos] [nocopy][{nondeterm|determ|single}] hecho_1[([Lista_Args_hecho_1])] ... [nocopy][{single|determ|nondeterm}] hecho_N[([Lista_Args_hecho_N])] ...
donde:

También podría gustarte