Contactos

Introducción al lenguaje de programación lógica Prólogo. Lenguaje de programación lógica Prolog Uso de prolog en el entorno c

La conferencia está dedicada a la resolución de problemas utilizando un gráfico de espacio de estados. El espacio de estados se describe en forma de un conjunto de estados: vértices del gráfico, un conjunto de transiciones de un estado a otro: arcos del gráfico, un conjunto de estados iniciales y un conjunto de estados finales. La solución al problema se representa como una ruta en el gráfico del espacio de estados que conecta el estado inicial con el estado final. Si el espacio de estados del problema es pequeño, entonces todas las soluciones óptimas se encontrarán mediante la búsqueda en profundidad. En problemas con un espacio de estados grande, solo se calculará una solución óptima mediante la búsqueda en amplitud. Los solucionadores universales se aplican a los problemas. Los estados en diferentes tareas pueden pertenecer a diferentes dominios. Para recordar las mejores soluciones encontradas, se utiliza una “variable variable” varM. El propio compilador encuentra los tipos necesarios. Visual Prolog versión 7.5, aún no publicada. Su publicación está prevista para 2014, pero aún no se conoce la fecha exacta. Visual Prolog 7.4 ya está disponible para todos.

Durante muchos milenios, la humanidad ha ido acumulando, procesando y transmitiendo conocimientos. Para estos fines, constantemente se inventan nuevos medios y se mejoran los antiguos: habla, escritura, correo, telégrafo, teléfono, etc. La llegada de las computadoras jugó un papel importante en la tecnología de procesamiento del conocimiento.

En octubre de 1981, el Ministerio de Industria y Comercio Internacional de Japón anunció la creación de una organización de investigación: el Instituto de Centro de Investigación de Tecnología Informática de Nueva Generación. El objetivo de este proyecto era crear sistemas de procesamiento de información basados ​​en el conocimiento. Se suponía que estos sistemas facilitarían la gestión debido a la capacidad de comunicarse con los usuarios utilizando el lenguaje natural. Se suponía que estos sistemas eran de autoaprendizaje, utilizaban el conocimiento acumulado en la memoria para resolver diversos tipos de problemas, brindaban a los usuarios asesoramiento experto y no se requería que el usuario fuera un especialista en informática. Se suponía que una persona podría utilizar una computadora de quinta generación tan fácilmente como cualquier electrodoméstico como un televisor, una grabadora y una aspiradora. Poco después del japonés, comenzaron los proyectos americanos y europeos.

La aparición de tales sistemas podría cambiar la tecnología mediante el uso de bases de conocimiento y sistemas expertos. La esencia principal de la transición cualitativa a la quinta generación de computadoras fue la transición del procesamiento de datos al procesamiento de conocimientos. Los japoneses esperaban poder no ajustar el pensamiento humano a los principios del funcionamiento de las computadoras, sino acercar el funcionamiento de las computadoras a la forma en que piensa una persona, al mismo tiempo que se alejaban de la arquitectura de las computadoras de von Neumann. En 1991 se planeó crear el primer prototipo de computadora de quinta generación.

Ahora está claro que los objetivos nunca se alcanzaron por completo, pero este proyecto impulsó el desarrollo de una nueva ronda de investigación en el campo de la inteligencia artificial y provocó una explosión de interés en la programación lógica. Dado que la arquitectura tradicional de von Neumann no era adecuada para una implementación eficiente, se crearon las computadoras de programación lógica especializadas PSI y PIM.

Como principal metodología de desarrollo de software para el proyecto informático de quinta generación se eligió la siguiente: programación lógica, cuyo representante destacado es el lenguaje Prolog. Parece que en la actualidad Prolog sigue siendo el lenguaje de inteligencia artificial más popular en Japón y Europa (en los EE. UU., tradicionalmente, está más extendido otro lenguaje de inteligencia artificial: el lenguaje de programación funcional Lisp).

El nombre del idioma "Prolog" proviene de las palabras PROGRAMACIÓN LÓGICA(PROgrammation en LOGique en francés y PROgramming in LOGic en inglés).

Prolog se basa en una rama de la lógica matemática como cálculo de predicados. Más precisamente, su base es el procedimiento para demostrar teoremas. método de resolución Para Cláusulas de cuerno. La próxima conferencia estará dedicada a este tema.

En la historia del surgimiento y desarrollo del lenguaje Prolog, se pueden distinguir las siguientes etapas.

En 1965, en el artículo "Una lógica orientada a máquinas basada en el principio de resolución", publicado en el número 12 del Journal of the ACM, J. Robinson presentó un método para encontrar automáticamente pruebas de teoremas en el cálculo de predicados de primer orden, llamado " principio de resolución". Este trabajo se puede leer en traducción: Robinson J. Lógica orientada a máquina basada en principio de la resolución// Colección cibernética. - Vol. 7 (1970). De hecho, la idea de este método fue propuesta por Herbrand en 1931, cuando aún no existían las computadoras (Herbrand, “Une Methode de Demostración”, These, París, 1931). Robinson modificó este método para que fuera adecuado para uso automático en computadora y, además, desarrolló un algoritmo de unificación eficaz que forma la base de su método.

En 1973, el "grupo de inteligencia artificial" dirigido por Alain Colmeroe creó un programa en la Universidad de Marsella destinado a demostrar teoremas. Este programa se ha utilizado para construir sistemas de procesamiento de textos en lenguaje natural. El programa de demostración de teoremas se llamó Prolog (de Programmation en Logique). Sirvió como prototipo para Prologue. Cuenta la leyenda que la autora de este nombre fue la esposa de Alan Colmeroe. El programa fue escrito en Fortran y se ejecutó bastante lentamente.

El trabajo de Robert Kowalski fue de gran importancia para el desarrollo de la programación lógica. Lógica de predicados Cómo lenguaje de programación"(Kowalski R. Predicate Logic as Programming Language. Congreso IFIP, 1974), en el que demostró que para lograr eficiencia es necesario limitarse al uso de un conjunto Cláusulas de cuerno. Por cierto, se sabe que Kowalski y Colmeroe trabajaron juntos durante un verano.

En 1976, Kowalski, junto con su colega Maarten van Emden, propusieron dos enfoques para la lectura de textos de programas lógicos: procedimental y declarativo. Estos enfoques se discutirán en la tercera conferencia.

En 1977 en Edimburgo, Warren y Pereira crearon un compilador Prolog muy eficiente para la computadora DEC-10, que sirvió como prototipo para muchas implementaciones posteriores de Prolog. Curiosamente,

Funcional;

Procesal;

Orientado a objetos;

Declarativo (relacional).

Programa escrito en Idioma funcional, expresa un algoritmo para resolver un problema en términos de los valores que devuelven las funciones. Por tanto, un programa representa un conjunto de funciones, cada una de las cuales devuelve sólo un valor de un determinado tipo. El trabajo del programa (el algoritmo para resolver el problema) es una llamada secuencial de funciones. Los lenguajes funcionales incluyen C.

Programa escrito en lenguaje procesal, expresa un algoritmo para resolver un problema en términos de acciones (procedimientos) que deben realizarse. La diferencia entre un procedimiento y una función es que un procedimiento puede devolver cualquier cantidad de valores, incluido ninguno. Así, el funcionamiento del programa es una llamada secuencial de procedimientos. Los lenguajes procesales incluyen Pascal, Basic, etc. Cabe señalar que en cualquier lenguaje de procedimiento es posible definir y utilizar funciones, y en un lenguaje funcional, procedimientos (funciones que no devuelven valores, generalmente definidas con el modificador void).

Programa escrito en lenguaje orientado a objetos, es un conjunto de objetos que interactúan entre sí enviando mensajes. Cada objeto se caracteriza por un componente informativo (un conjunto de atributos) y un componente conductual (un conjunto de eventos y métodos). El trabajo del programa es un intercambio secuencial de mensajes (métodos de llamada) entre objetos. Los lenguajes orientados a objetos incluyen Object Pascal, Visual Basic, C++, Java, etc. Cabe señalar que cualquier lenguaje orientado a objetos tiene la posibilidad de programación procedimental.

Lo que es común a todas las categorías de idiomas enumeradas es que el programa describe lo que se debe hacer y cómo resolver el problema, es decir, Se describe la secuencia de resolución del problema.

Programa escrito en lenguaje declarativo, es una descripción del área temática a través de un conjunto de relaciones (relación en inglés) entre objetos (entidades) y la formulación de la meta (tarea) a resolver. A diferencia de los lenguajes enumerados anteriormente, dicho programa no describe explícitamente la secuencia de acciones necesarias para resolver un problema. Como regla general, el procedimiento para encontrar una solución se realiza automáticamente utilizando el aparato matemático o lógico apropiado que subyace al lenguaje y se implementa en su intérprete específico 1 (compilador 2). Los lenguajes declarativos incluyen Prolog, SQL, etc. Por tanto, la ventaja indudable de los lenguajes declarativos es la concentración de la atención del desarrollador en lo que se debe hacer y no en cómo.

Otra clasificación de lenguajes de programación se basa en estilo de programación :

- imperativo– un programa es una secuencia de declaraciones (comandos ejecutados por una computadora), con la ayuda de las cuales el programador debe explicar a la computadora cómo resolver un problema(lenguajes de programación funcionales, procedimentales y orientados a objetos);

- declarativo– un programa es un conjunto de declaraciones que describen un área temática o una situación actual, con la ayuda de las cuales el programador debe describir, lo que hay que resolver (encontrar)– el sistema de programación imperativo buscará una solución.

Existe una clasificación muy conocida de los lenguajes de programación según su proximidad al lenguaje de máquina o al lenguaje humano natural. Los que están más cerca de la computadora se denominan lenguajes de bajo nivel (Ensamblador), y los que están más cerca de los humanos se denominan lenguajes de alto nivel (Basic, Pascal, Java, etc.). En este sentido, los lenguajes declarativos pueden denominarse lenguajes de nivel superalto o de más alto nivel, ya que están muy cerca del lenguaje humano y del pensamiento humano.

En 1965, en “Una lógica orientada a máquinas basada en el principio de resolución”, 3 publicado en el número 12 del Journal of the ACM, J. Robinson presentó un método para buscar automáticamente pruebas de teoremas en el cálculo de predicados de primer orden, llamado "principio de resolución". De hecho, la idea de este método fue propuesta por Herbrand en 1931, cuando aún no existían las computadoras (Herbrand, “Une Methode de Demostración”, These, París, 1931). Robinson modificó este método para que fuera adecuado para uso automático (computador) y desarrolló un algoritmo de unificación eficaz que forma la base de su método.

La idea de utilizar la lógica como lenguaje de programación se originó a principios de los años 1970. Los primeros investigadores que desarrollaron esta idea fueron Robert Kowalski de Edimburgo (base teórica, artículos de 1971 y 1974), Maarten van Emden de Edimburgo (sistema de demostración experimental) y Alain Colmeroe Colmerauer) de Marsella (realización, 1973). En 1973, un "grupo de inteligencia artificial" dirigido por Alain Colmeroe creó un programa en la Universidad de Marsella diseñado para demostrar teoremas. Este programa se ha utilizado para construir sistemas de procesamiento de textos en lenguaje natural. El programa de demostración de teoremas se llamó Prolog (en francés PROgrammation en LOGique) y sirvió como prototipo de Prolog. Hay leyendas que dicen que la autora de este nombre fue la esposa de Alain Colmeroe. El programa fue escrito en Fortran y se ejecutó bastante lentamente.

La popularización de Prolog se vio facilitada en gran medida por:

Una implementación eficiente (intérprete/compilador) de este lenguaje para la computadora DEC-10 realizada por David D.H. Warren de Edimburgo en 1977 sirvió como prototipo para muchas implementaciones posteriores de Prolog. Curiosamente, el compilador fue escrito en el propio Prolog. Esta implementación de Prolog, conocida como la "versión de Edimburgo", se convirtió efectivamente en el primer y único estándar del lenguaje;

Desarrollo de una versión para ordenadores personales por Clark y McCabe (Gran Bretaña) en 1980;

Proyecto japonés para crear ordenadores de V generación. A finales de 1978, el Ministerio de Industria y Comercio Exterior (MFTI) de Japón encomendó el desarrollo de un proyecto de computadora inteligente al Instituto de Tecnología Informática de Tokio (ICOT) 4, creado especialmente para este propósito. Se suponía que el corazón de estas computadoras no era un procesador aritmético, sino uno especialmente optimizado para trabajar con programas similares a Prologue.

En 1995 se publicó la norma oficial ISO 5 /IEC 6 del lenguaje Prolog (ISO/IEC 13211-1 “Tecnologías de la información - Lenguajes de programación - Prolog - Parte 1: Núcleo general" - “Tecnologías de la información. Lenguajes de programación. Prolog . Parte 1. Núcleo general").

Hoy en día existen bastantes implementaciones de Prolog. Los más famosos son los siguientes: BinProlog, AMZI-Prolog, Arity Prolog, CProlog, Micro Prolog, MProlog, Prolog-2, Quintus Prolog, SICTUS Prolog, Silogic iis Workbench, Strawberry Prolog, SWI-Prolog, Turbo Prolog (PDC Prolog, Visual Prolog), UNSW Prolog, etc. En nuestro país se desarrollaron versiones de Prolog como Prolog-D (S. Grigoriev), Actor Prolog (A. Morozov) y Flang (A. Mantsivoda, V. Petukhin). .

5. Defina los conceptos: "", "", "".

9. ¿Qué se entiende por “ ” y “ ” de la lista?

La aparición de Prologue se debió al desarrollo de la lógica, las matemáticas y la programación. Este último jugó el papel más importante. Los especialistas en lógica y matemáticas intentaron poner la programación en el "camino correcto", pero el desarrollo de la tecnología de la información mostró un resultado completamente diferente.

La programación imperativa pragmática resultó ser más prometedora. "Prolog" tuvo éxito como lenguaje de programación, pero no se convirtió en la base de la inteligencia artificial.

Programación clásica versus lógica

Una persona toma decisiones difíciles de forma lógica y razonable. Casi sin pensar, una persona actúa sabiamente. Si no tomamos en cuenta decisiones que requieren recopilar información, analizarla y realizar cálculos complejos, entonces cualquier resultado es rápido, preciso y razonable.

Este hecho siempre ha dado una razón ilusoria para considerar la creación de una herramienta para la toma de decisiones como una cuestión sencilla. Con la llegada de Prologue, parecía que la cuestión de la inteligencia artificial era una cuestión de tecnología, y al Homo sapiens se le ocurrieron tres leyes de la robótica. Sin embargo, la inteligencia artificial siguió siendo un fantasma y las tres leyes de la robótica resultaron ser sacadas de un cuento de hadas: "haz esto, no sé qué".

La programación en el sentido clásico de la palabra (a menudo se utilizan los términos "procedimental", "imperativo" o "funcional") se ha desarrollado y superado con éxito los "tiempos convulsos" de los años 80 y 90, cuando existían innumerables lenguajes de programación.

La lucha de manifestación entre “Pascal” y “Si” duró mucho tiempo y fue brutal, pero terminó de manera neutral y silenciosa. Lo que queda es la idea de un buen lenguaje de programación y varias implementaciones exitosas del mismo.

Esto no quiere decir que Prolog como lenguaje de programación no haya evolucionado. Pero no logró los objetivos declarados. Hoy no sólo podemos decir, sino también justificar: “Prólogo” es un lenguaje académico para:

  • Objetivos de aprendizaje;
  • lógica de predicados;
  • matemáticas;
  • aplicación estrecha.

Es dudoso que esta afirmación pueda ser refutada. La inteligencia artificial no sólo es un uso generalizado, sino también un acontecimiento muy grave que cambia radicalmente la estructura social y la imagen del mundo.

La programación en el lenguaje Prolog para inteligencia artificial no se llevó a cabo: durante más de cuarenta años de historia del lenguaje, no ha habido un solo evento radicalmente nuevo que sea relevante para la conciencia pública y que indique lo contrario.

La realidad objetiva es ésta: no es tanto el más fuerte el que sobrevive, sino lo que tiene demanda y es relevante.

"Prolog" es un lenguaje de programación declarativo

Tener una herramienta para describir hechos y reglas es bueno, pero ¿cuál es el punto? Los hechos y las reglas encajan perfectamente en una base de datos normal. Un programador clásico calificado proporciona un diálogo interactivo para el usuario y este último resuelve sus problemas.

Si es necesario, el programador perfecciona el diálogo y el usuario complementa la base de datos con hechos y reglas. Una opción absolutamente funcional y probada durante décadas para implementar una gran cantidad de problemas ya resueltos y solucionables.

Una presentación declarativa de hechos y reglas en cualquier implementación del lenguaje de programación Prolog es una convención, un intento de formalizar la realidad en su estado intelectual. La programación convencional no toca el intelecto. La programación clásica se conforma con el puesto: descripción y procesamiento de datos. Hay muchos problemas aquí, pero hay muchas soluciones brillantes que funcionan.

"Prolog" como lenguaje de programación son los hechos:

  • madre (María, Natasha); - María - la madre de Natasha;
  • papá (Evgeniy, Marina); - Evgeniy es el padre de Marina.

Aquí un hecho salta a la vista: “María” y “Marina” son nombres diferentes. Nada le impide agregar el hecho:

  • papá (Eugene, María); - Evgeniy es el papá de María.

Estas descripciones dan vida a las reglas:

  • padre(x,y)<- папа (x, y);
  • padre(x,y)<- мама (x, y);

Pero no nos permiten concluir que papá es el padre de Marina y Marina es la madre de María. Este problema se puede resolver; puedes agregar una regla más, agregar un hecho más. Pero ¿cuántas de estas acciones deberían tomarse en una situación real?

De hecho, "Prolog" como lenguaje de programación es un ejemplo de declaración de hechos y reglas, pero no de la lógica a la que está acostumbrada la conciencia de un programador clásico. "Prolog" se posiciona como un lenguaje de lógica de predicados, pero es posible aprender a programar en él solo a través de ejemplos y descripciones de muestra de los desarrolladores de una implementación específica del lenguaje.

La familia del prólogo

Francia es considerada el lugar de nacimiento de Prologue y 1973 es el año de nacimiento. El interés por el idioma se renovaba periódicamente, pero disminuía con una estabilidad envidiable. El lema del idioma: “¡La lógica de predicados es elemental! Esta es una manera de explicar cómo funciona el pensamiento” - y siguió siendo el lema.

Cualquier implementación del lenguaje de programación Prolog siguió estrictamente la lógica de predicados, pero siempre incluyó ideas clásicas de programación procedimental. Es más correcto decir "imperativo", ya que este término se utiliza con más formalidad que el de procedimiento, funcional, orientado a objetos u otro.

Cualquier programación trata sobre datos y su procesamiento. Las construcciones del lenguaje deben describir el problema que se está resolviendo con la mayor precisión posible, razón por la cual todas las implementaciones conocidas de Prolog: Turbo Prolog, Win Prolog, SWI Prolog, GNU Prolog, Visual Prolog y otras contienen, además de construcciones declarativas, expresiones imperativas ordinarias.

Se cree que la familia Prologue se desarrolla en organizaciones académicas y de investigación y, por lo tanto, sólo se puede hablar de ella como un lenguaje común en un sentido conceptual. Sin embargo, se puede considerar el hecho mismo de que el concepto de "Prolog" está vivo y en desarrollo: este lenguaje tiene un alcance y tiene demanda en una cierta gama de tareas.

La base de la inteligencia artificial

El interés por la inteligencia artificial nunca ha decaído, simplemente empiezan a hablar de ello cuando surge la próxima ocasión, pero Prolog nunca se ha asociado con la inteligencia artificial más que con un lenguaje de programación clásico común y corriente.

A finales de los años 80 surgió un proyecto intelectual real, relevante y popular “La máquina inventadora”. Hubo un intento real de utilizar Prolog para formalizar una enorme base de conocimientos prácticos (datos) sobre invenciones, leyes físicas, químicas y de otro tipo.

El resultado no se logró: hubo que escribir demasiados hechos y reglas en Prolog como lenguaje de programación, que eran de carácter imperativo banal. Mientras tanto, muchos productos de software exitosos se implementaron en paralelo en lenguajes comunes.

A principios de los años 90, se implementó con éxito un proyecto de un sistema intelectual real que simulaba el comportamiento de un niño menor de 3 años en una computadora de la UE. Ni siquiera se consideró la opción de utilizar Prolog.

Este sistema intelectual no sólo "descubrió" qué eran mamá y papá, y en qué se diferenciaban María de Marina, sino que también, sin mucho esfuerzo, saltó de forma independiente de los conocimientos adquiridos sobre estos temas a las pelotas y sus diferencias con los cubos, a los colores de objetos y... (!) a las matemáticas elementales: las operaciones aritméticas simples resultaron estar dentro de sus capacidades basándose en los conocimientos adquiridos al resolver problemas completamente diferentes.

No se puede decir que la programación clásica esté por delante de Prolog en términos de dominio del territorio de la inteligencia artificial, pero da resultados reales.

En cuanto a la inteligencia como tarea, aparentemente la cuestión aquí no radica en el lenguaje, sino en la idea de implementación. Si el ensamblador de 1991 pudo “convertirse en la base” de un sistema inteligente de inteligencia situacional, entonces la cuestión claramente no reside en el lenguaje de implementación, sino en la idea.

En Prolog obtenemos una solución a un problema mediante derivación lógica a partir de disposiciones previamente conocidas. Normalmente, un programa Prolog no es una secuencia de acciones: es un conjunto de hechos con reglas que proporcionan conclusiones basadas en estos hechos. Por lo tanto, Prolog se conoce como lenguaje declarativo.

Prolog incluye un mecanismo de inferencia que se basa en la coincidencia de patrones. Al seleccionar respuestas a consultas, recupera información almacenada (conocida). Prolog intenta probar la verdad de una hipótesis (en otras palabras, responder una pregunta) solicitando información que ya se sabe que es verdadera. El conocimiento de Prolog sobre el mundo es un conjunto limitado de hechos (y reglas) especificados en el programa.

Una de las características más importantes de Prolog es que, además de encontrar respuestas lógicas a las preguntas que planteas, puede abordar alternativas y encontrar todas las soluciones posibles. En lugar de simplemente trabajar desde el principio de un programa hasta el final, Prolog puede retroceder y mirar más de una "ruta" para resolver todas las partes de un problema.

La lógica de predicados se desarrolló para traducir los principios del pensamiento lógico a una forma escrita lo más fácilmente posible. Prolog aprovecha la sintaxis lógica para desarrollar un lenguaje de programación. En la lógica de predicados, primero eliminas todas las palabras no esenciales de tus oraciones. Luego transformas estas oraciones poniendo primero la relación, seguida de los objetos agrupados. Posteriormente, los objetos se convierten en argumentos entre los que se establece esta relación. Como ejemplo en la tabla. Las oraciones se presentan transformadas de acuerdo con la sintaxis de la lógica de predicados.

Tabla 1. Sintaxis de la lógica de predicados

2. Hechos

En Prolog describen objetos (objetos) Y relación (relaciones), y luego describe normas (normas) para los cuales estas relaciones son verdaderas. Por ejemplo, una frase

A Bill le encantan los perros. (A Bill le gustan los perros.)

establece la relación entre los objetos Bill y perros (Bill y perros); esta relación es de me gusta. A continuación se muestra una regla que determina cuándo la frase "Bill ama a los perros" es verdadera:

A Bill le encantan los perros, siempre y cuando sean buenos. (A Bill le gustan los perros si son amables).

En Prolog, una relación entre objetos se llama hecho(hecho). En el lenguaje natural, una relación se establece en una oración. En la lógica de predicados utilizada por Prolog, una relación corresponde a una frase simple (hecho) que consta del nombre de la relación y un objeto u objetos entre paréntesis. Me gusta la propuesta hecho termina con un punto (.) .

A continuación se muestran varias frases en lenguaje natural con la relación “me gusta”:

Bill ama a Cindy. (A Bill le gusta Cindy)

Cindy ama a Bill. (A Cindy le gusta Bill)

A Bill le encantan los perros. (A Bill le gustan los perros)

Ahora reescribamos estos mismos hechos usando la sintaxis de Prolog:

le gusta (bill, cindy).

Me gusta (cindy, bill).

le gusta (bill, perros).

Los hechos, además de las relaciones, también pueden expresar propiedades. Entonces, por ejemplo, las oraciones en lenguaje natural "Kermitisgreen" y "Caitlinisgirl" en Prolog, que expresan las mismas propiedades, se ven así:

3. Predicados

Una relación en Prolog se llama predicado. Argumentos- estos son objetos que están conectados por esta relación; En realidad

Me gusta (bill, cindy).

la relación de me gusta es el predicado y los objetos bill y cindy son los argumentos.

Ejemplos de predicados con diferente número de argumentos:

pred(entero, símbolo)

persona (apellido, nombre, género)

cumpleaños(nombre, apellido, fecha)

El ejemplo muestra que los predicados no pueden tener ningún argumento.

4. Reglas

Las reglas le permiten inferir un hecho a partir de otros hechos. En otras palabras, podemos decir que regla - es una conclusión que se sabe que es verdadera si una o más conclusiones o hechos encontrados son verdaderos. A continuación se detallan las reglas correspondientes a la conexión de “me gusta”:

Cindy ama todo lo que ama Bill. (A Cindy le gusta todo lo que le gusta a Bill)

A Caitlin le encanta todo lo verde. (A Caitlin le gusta todo lo que es verde)

Usando estas reglas, puedes, a partir de los datos anteriores, encontrar algunas cosas que les gusten a Cindy y Caitlin:

Cindy ama a Cindy. (A Cindy le gusta Cindy)

Caitlin ama a Kermit. (A Caitlin le gusta Kermit)

Para traducir estas reglas a Prolog, necesitas cambiar ligeramente la sintaxis:

le gusta(cindy, algo):- le gusta(bill, algo). ilikes(caitlin, Algo):- verde (Algo).

El símbolo: - tiene el significado de “si”, y sirve para separar las dos partes de la regla: la cabeza y el cuerpo. Una regla también puede verse como un procedimiento. En otras palabras, las reglas

le gusta(cindy, algo):- le gusta(bill, algo).

le gusta(caitlin, Algo):- verde (Algo).

significar: "Para demostrar que Cindy ama algo, demuestra que Bill lo ama." Y " Para demostrar que Caitlin ama algo, demuestra que es algo verde".. Desde este punto de vista "procedimental", las reglas pueden "pedirle" a Prolog que haga otras cosas además de probar hechos, como imprimir algo.

5. Solicitudes (Metas)

Habiendo descrito varios hechos en Prolog, puedes hacer preguntas sobre las relaciones entre ellos. Se llama pedido(consulta) Sistemas de lenguaje Prolog. Puedes hacerle a Prolog las mismas preguntas que podríamos hacerte sobre estas relaciones. Basándose en hechos y reglas previamente conocidos, puede responder preguntas sobre estas relaciones, tal como lo puede hacer Prolog. En lenguaje natural preguntamos: Hace Factura como cindy ? (¿Bill ama a Cindy?) Según las reglas de Prolog, preguntamos:

le gusta (bill, cindy).

Al recibir dicha solicitud, Prolog responderá:

porque Prolog tiene un hecho que demuestra que es así. Para complicar un poco la pregunta, puedes preguntar en lenguaje natural: Qué hace Factura como ? (¿Qué le gusta a Bill?) Según las reglas de Prolog, preguntamos:

le gusta(bill, qué).

Cabe señalar que el segundo objeto, Qué, comienza con letra mayúscula, mientras que el primer objeto, factura, no. Esto sucede porque Bill es un objeto fijo, un objeto constante es una cantidad conocida y What es una variable.

variables ¡Empiece siempre con mayúscula o guión bajo!

Prolog siempre busca una respuesta a una consulta, comenzando con el primer hecho, y recorre todos los hechos hasta que no hay más.. Cuando se le pregunta qué le gusta a Bill, Prolog responderá:

Entonces, como él sabe que

le gusta (bill, cindy).

le gusta (bill, perros).

Si preguntáramos:

¿Qué le gusta a Cindy? (¿Qué le gusta a Cindy?)

le gusta (cindy, qué).

entonces Prolog respondería:

porque Prologue sabe que Cindy ama a Bill, y que Cindy ama las mismas cosas que Bill ama, y ​​que Bill ama a Cindy y a los perros.

Podríamos hacerle a Prolog otras preguntas que se le podrían hacer a un humano. Pero preguntas como "¿Qué tipo de chica le gusta a Bill?" no obtendrá una solución, porque en este caso Prolog no conoce los hechos sobre la niña y no puede sacar una conclusión basada en datos desconocidos: en este ejemplo, no le dimos a Prolog ninguna relación o propiedad para determinar si hay algún objeto. por chicas.

6. Publicar hechos, reglas y consultas

Supongamos que existen los siguientes hechos y reglas:

Un coche rápido es agradable. (Afastcarisfun).

Un auto grande es hermoso. (Un auto grande es bueno).

Un coche pequeño, práctico. (Un coche pequeño es práctico).

A Bill le gusta un auto si es lindo. (A Bill le gusta un auto si es divertido).

Al examinar estos hechos, puedes concluir que a Bill le gustan los autos rápidos. En la mayoría de los casos, Prolog llegará a una solución similar. Si no hubiera datos sobre los autos rápidos, no serías capaz de inferir lógicamente qué autos le gustan a Bill. Puedes hacer conjeturas sobre qué tipo de máquinas podrían ser difíciles, pero Prolog sólo sabe lo que le dices. El prólogo no hace suposiciones.

A continuación se muestra un ejemplo que muestra cómo Prolog usa reglas para responder consultas. Mire los hechos y las reglas en esta parte del programa ch02e01.pro:

le gusta (ellen, tenis).

le gusta (John, fútbol).

Me gusta (rasgado, béisbol).

le gusta (eric, nadar).

le gusta (marca, tenis).

Me gusta (factura, Actividad):- Me gusta (rasgado, Actividad).

La última línea del programa es la regla. Esta regla corresponde a una oración en lenguaje natural:

A Bill le gusta la actividad si a Tom le gusta la actividad. (A Bill le gusta una actividad si a Tom le gusta esa actividad)

En esta regla, la cabeza es me gusta (bill, Actividad) y el cuerpo es me gusta (rasgado, Actividad). Tenga en cuenta que en este ejemplo no hay datos sobre el amor de Bill por el béisbol. Para saber si a Bill le gusta el béisbol, puedes preguntarle a Prolog de esta manera:

Me gusta (bill, béisbol).

Al intentar encontrar una solución a esta consulta, Prolog utilizará la regla:

Cargue el programa ch02e01.pro en el entorno de desarrollo visual VisualProlog y ejecútelo con la utilidad TestGoal. .

me gusta(símbolo,símbolo)

le gusta (ellen, tenis).

le gusta (John, fútbol).

le gusta (rasgado, béisbol).

le gusta (eric, nadar).

le gusta (marca, tenis).

Me gusta (factura, Actividad): - Me gusta (rasgado, Actividad).

le gusta (bill, béisbol).

La utilidad TestGoal responderá en la ventana de la aplicación:

El sistema utilizó una regla combinada.

Me gusta(factura, Actividad):- Me gusta(rasgado, Actividad).

le gusta(rasgado, béisbol). para resolver eso le gusta (bill, béisbol).

Pruebe también la siguiente consulta en la sección OBJETIVO:

le gusta (bill, tenis).

La utilidad Test Goal responderá:

porque el:

· no hay hechos que digan que a Bill le encanta el tenis;

· La actitud de Bill hacia el tenis no se puede inferir lógicamente utilizando esta regla y los hechos disponibles.



¿Te gustó el artículo? Compártelo