{"id":235,"date":"2018-09-11T20:04:21","date_gmt":"2018-09-12T02:04:21","guid":{"rendered":"http:\/\/virtual.cuautitlan.unam.mx\/intar\/?page_id=235"},"modified":"2021-07-11T15:46:15","modified_gmt":"2021-07-11T20:46:15","slug":"sintaxis-basica-de-prolog","status":"publish","type":"page","link":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/?page_id=235","title":{"rendered":"Sintaxis b\u00e1sica de PROLOG"},"content":{"rendered":"<h1><strong>Sintaxis del lenguaje de programaci\u00f3n PROLOG<\/strong><\/h1>\n<p>Antes de iniciar con la explicaci\u00f3n de los conceptos b\u00e1sicos de PROLOG, es necesario entender algunos de los elementos sint\u00e1cticos m\u00e1s importantes de dicho lenguaje:<\/p>\n<ul>\n<li><strong>Variables.<\/strong> Las variables en PROLOG deben de iniciar con letra may\u00fascula para poder identificarla, es decir es correcto usar la variable \u201c<em>Variable<\/em>\u201d, pero incorrecto definirla como \u201c<em>variable<\/em>\u201d.<\/li>\n<li><strong>Constantes.<\/strong> Los datos constantes deben de iniciar su definici\u00f3n con min\u00fascula, para que pueda ser identificada como tal. Es correcto definir una constante como \u201c<em>constante<\/em>\u201d, pero incorrecto definirla como \u201c<em>Constante<\/em>\u201d.<\/li>\n<li><strong>Afirmaci\u00f3n.<\/strong> Cada afirmaci\u00f3n debe ser terminada por medio de un punto, esto indicar\u00e1 al lenguaje la finalizaci\u00f3n de cada sentencia, y obviamente, la posibilidad de comenzar una nueva sentencia.<\/li>\n<li><strong>NO usar nombres compuestos<\/strong> separados por espacio para nombrar constantes, variables, predicados, reglas, etc. , es incorrecto definir un nombre llamado \u201c<em>somos ingenieros<\/em>\u201d, pero es correcto definirlo como \u201c<em>somos_ingenieros<\/em>\u201d.<\/li>\n<li><strong>Comentarios.<\/strong> Podemos comentar el software por medio del s\u00edmbolo reservado \u201c%\u201d, cada que se coloque dicho s\u00edmbolo, PROLOG entender\u00e1 que los enunciados posteriores a \u00e9l, ser\u00e1n solo comentarios y no los tomar\u00e1 en cuenta para la lectura y ejecuci\u00f3n del programa realizado.<\/li>\n<\/ul>\n<p>El lenguaje de programaci\u00f3n PROLOG, est\u00e1 basado principalmente en la definici\u00f3n de hechos, relaciones y reglas. Esto realizado por medio de l\u00f3gica de predicados.<\/p>\n<ul>\n<li><strong>Hechos mono\u00e1dicos.<\/strong> Es la representaci\u00f3n m\u00e1s simple dentro del lenguaje de programaci\u00f3n. Por medio de estos, se busca darle una caracter\u00edstica a un objeto (sujeto). Son representados en la forma:<em> felino(gato)<\/em>. En este caso, podemos ver que \u201cfelino\u201d es el predicado del sujeto \u201cgato\u201d, el predicado definido se puede leer como \u201c<em>gato es un felino<\/em>\u201d.<\/li>\n<li><strong>Hecho poli\u00e1dico.<\/strong> En este tipo de predicados, se busca enmarcar las relaciones que existen entre los distintos objetos, por ejemplo: <em>es_un_animal(tibur\u00f3n, acu\u00e1tico)<\/em>. En este caso, el predicado se puede leer como \u201c<em>tibur\u00f3n es un animal acu\u00e1tico<\/em>\u201d, y de esa manera se genera la relaci\u00f3n que existe entre los objetos definidos.<\/li>\n<li><strong>Reglas.<\/strong> Est\u00e1n definidas como la interconexi\u00f3n de predicados verdaderos, para confirmar un hecho que debe ser tambi\u00e9n verdadero. La definici\u00f3n de reglas se da por medio de la estructura:<\/li>\n<\/ul>\n<pre class=\"lang:ada decode:true \">regla(objeto1, objeto2):- hecho1(objeto1, objeto_n), hecho2(objeto_n, objeto2).<\/pre>\n<p>Esta sentencia puede leerse en la forma la \u201cregla\u201d es verdadera si y s\u00f3lo si el \u201checho1\u201d y el \u201checho2\u201d son verdaderos. En esta sentencia es importante hacer menci\u00f3n a la situaci\u00f3n e la cual el \u201checho1\u201d y el \u201checho2\u201d est\u00e1n relacionadas entre s\u00ed por medio de \u201cobjeto_n\u201d.<\/p>\n<p>Los predicados, o hechos, pueden tener una cantidad $n$ de objetos o argumentos, con lo cual podemos tener una representaci\u00f3n general en la forma:<\/p>\n<pre class=\"lang:default decode:true \">hecho(objeto_1, objeto_2, \u2026.., objeto_n).<\/pre>\n<p>Definiendo cada predicado, con objetos relacionados l\u00f3gicamente entre s\u00ed.<br \/>\nLas reglas tambi\u00e9n pueden tener una cantidad $m$ de hechos, y una cantidad $i$ de objetos, la forma general de las reglas puede ser mostrada en la siguiente forma:<\/p>\n<pre class=\"lang:ada decode:true\" title=\"Regla PROLOG\">Regla(objeto_1, objeto_2, \u2026, objeto_i):- \r\nhecho_1(objeto_1, objeto_2, \u2026, objeto_n), hecho_2(objeto_1, \r\nobjeto_2, \u2026, objeto_n), \u2026.., hecho_m(objeto_1, objeto_2, \u2026, \r\nobjeto_n).<\/pre>\n<p>Algunas caracter\u00edsticas importantes de mencionar al momento de generar las reglas y los hechos son:<\/p>\n<ul>\n<li>\u00a0Ambos pueden ser declarados con una cantidad nula de objetos.<\/li>\n<li>Si existen relaciones entre los hechos, estas deben de ser cumplidas exitosamente. No pude haber una relaci\u00f3n entre hechos u objetos que no sean cumplidas.<\/li>\n<li>Para que la regla sea verdadera, todos los hechos deben ser verdaderos.<\/li>\n<\/ul>\n<p>Cuando se tienen predicados simples, se considera que solamente estamos llenando una base de conocimientos, base que puede ser utilizada posteriormente por programas m\u00e1s complejos.<\/p>\n<p><strong>Ejemplo 1:-<\/strong> Generar una base de conocimientos d\u00f3nde se defina la caracter\u00edstica \u201cave\u201d de diferentes objetos.<\/p>\n<pre class=\"lang:ada decode:true\">ave(loro).\r\nave(pato).\r\nave(ganso).\r\nave(ping\u00fcino).\r\nave(gallo).\r\nave(perico).<\/pre>\n<p><strong>Ejemplo 2:-<\/strong> Generar una base de conocimiento donde se defina la relaci\u00f3n \u201cque tipo de animal es\u201d de dos objetos.<\/p>\n<pre class=\"lang:lisp decode:true\">es_tipo(perro, terrestre).\r\nes_tipo(ganso, a\u00e9reo).\r\nes_tipo(tibur\u00f3n, acu\u00e1tico).\r\nes_tipo(tigre, terrestre).\r\nes_tipo(murci\u00e9lago, a\u00e9reo).\r\nes_tipo(delf\u00edn, acu\u00e1tico).<\/pre>\n<p>Cuando se realiza un programa de este tipo en PROLOG, este se ejecuta por medio de consultas, es decir, asumiendo que estamos ejecutando la base de conocimientos del ejemplo 2, en el int\u00e9rprete consultamos \u201c<em>? es_tipo(X,Z).<\/em>\u201d<\/p>\n<p>Bajo esta consulta, PROLOG intentar\u00e1 instanciar las variables X y Z, asign\u00e1ndoles valores para los cuales el predicado se convierte en verdadero. PROLOG, no genera una \u00fanica respuesta, generara tantas respuestas como existan condiciones que vuelvan verdadero al predicado, por ejemplo, para este caso PROLOG instanciara <em>X = perro<\/em> y <em>Z = terrestre<\/em>, as\u00ed como tambi\u00e9n <em>X = ganso<\/em> y <em>Z = a\u00e9reo<\/em>, as\u00ed hasta completar todos los posibles valores que sean verdaderos.<\/p>\n<p>Si PROLOG no puede instanciar una de las variables de la consulta, el int\u00e9rprete regresar\u00e1 una respuesta falsa, es decir que la b\u00fasqueda ha fracasado.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sintaxis del lenguaje de programaci\u00f3n PROLOG Antes de iniciar con la explicaci\u00f3n de los conceptos b\u00e1sicos de PROLOG, es necesario entender algunos de los elementos sint\u00e1cticos m\u00e1s importantes de dicho lenguaje: Variables. Las variables en PROLOG deben de iniciar con letra may\u00fascula para poder identificarla, es decir es correcto usar la variable \u201cVariable\u201d, pero incorrecto &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/virtual.cuautitlan.unam.mx\/intar\/?page_id=235\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> &#8220;Sintaxis b\u00e1sica de PROLOG&#8221;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-235","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=\/wp\/v2\/pages\/235"}],"collection":[{"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=235"}],"version-history":[{"count":23,"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=\/wp\/v2\/pages\/235\/revisions"}],"predecessor-version":[{"id":1241,"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=\/wp\/v2\/pages\/235\/revisions\/1241"}],"wp:attachment":[{"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}