introducción a swi-prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · el gui...
TRANSCRIPT
![Page 1: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/1.jpg)
Introducción a SWI-Prolog
ETSI InformáticaDpto. Lenguajes y Ciencias
de la ComputaciónUniversidad de Málaga
![Page 2: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/2.jpg)
El GUI de SWI-Prolog
Está basado en dos ventanas:o La ventana principal, con una línea
donde se ejecutan los objetivoso La ventana de edición, donde se
editan y compilan los programaso La ventana principal siempre existe, la
de edición sólo cuando se está usando
![Page 3: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/3.jpg)
Navegación por directorios
Podemos usar tres predicados basados en Unix:
o pwdo lso cd
![Page 4: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/4.jpg)
Ver directorio actual
Predicado pwd/0
Ejemplo: ?- pwd.c:/src/prolog
Utiliza notación Unix para los directorios (‘/’ en lugar de ‘\’)
![Page 5: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/5.jpg)
Ver contenido del directorio
Predicado ls/0
Ejemplo: ?- ls. ejemplo.pl principios.pl intro.pl proyecto/
![Page 6: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/6.jpg)
Cambiar de directorio
Predicado cd/1
Ejemplo: ?- cd(‘e:/trabajo/prolog’). La ruta aparece entre apóstrofos La ruta puede ser relativa o absoluta Recuerda: notación Unix
![Page 7: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/7.jpg)
Edición de programas Prolog
El predicado edit/1 permite:o Crear un programa nuevoo Editar un programa existenteo Editar un predicado concreto La ventana de edición aparece al
invocar a edit/1
![Page 8: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/8.jpg)
Crear un programa nuevo
Ejemplo:?- edit(file(‘ejemplo.pl’)).
El functor file es imprescindible La extensión debe ser .pl Ruta: Unix, entre apóstrofos El fichero no debe existir El fichero creado será un fichero de
texto Unix (aunque uses Windows)
![Page 9: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/9.jpg)
Edita y guarda este programa
% quiere/2quiere(juan, elena).quiere(manuel, elena).% celoso/2celoso(X,Y) :-
quiere(X,T), quier(Y,Z),X \== Y.
![Page 10: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/10.jpg)
Coloreado del código
El editor colorea el programa conforme lo editamos
El coloreado atiende a razones sintácticas
Puede ayudar a descubrir errores
![Page 11: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/11.jpg)
Nuestro programa coloreado
% quiere/2quiere(juan, elena).quiere(manuel, elena).% celoso/2celoso(X,Y) :-
quiere(X,T), quier(Y,Z),X \== Y.
![Page 12: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/12.jpg)
Código de colores
Predicado llamado: quiere Predicado no llamado: celoso Predicado indefinido: quier Predicado predefinido: \== Variable: X Variable unitaria (singleton): T Comentario: % quiere/2
![Page 13: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/13.jpg)
Nuestro programa corregido
% quiere/2quiere(juan, elena).quiere(manuel, elena).% celoso/2celoso(X,Y) :-
quiere(X,Z), quiere(Y,Z),X \== Y.
![Page 14: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/14.jpg)
Otros elementos de resaltado
Las llamadas recursivas se subrayan:antepasado(X,Y) :-
progenitor(X,Y).antepasado(X,Y) :-
progenitor(X,Z),antepasado(Z,Y).
Al colocarse sobre una variable se destacan todas sus apariciones
Al colocarse junto a un paréntesis se destaca su pareja
![Page 15: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/15.jpg)
Compilar
En el menú del editor, selecciona Compile/Compile Buffer
Si hay errores aparecen en una ventana emergente
Si el programa ha sido modificado se ofrece la posibilidad de guardarlo antes de compilarlo
![Page 16: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/16.jpg)
Ejecutar
Objetivo en la ventana principal Solicita más respuestas con ;
?- celoso(A,B).A = juanB = manuel ;A = manuelB = juan ;No
![Page 17: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/17.jpg)
Salir del entorno
Predicado halt/0?- halt.
![Page 18: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/18.jpg)
Editar un programa existente
Ejemplo:?- edit(‘ejemplo.pl’).
El fichero debe existir Se puede simplificar a:?- edit(ejemplo).si ‘ejemplo.pl’ está en el directorio actual
![Page 19: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/19.jpg)
Editar un predicado concreto
Ejemplo:?- edit(celoso/2).
Hay que indicar nombre y aridad Sólo funciona si el predicado ha sido
compilado previamente
![Page 20: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/20.jpg)
Ayuda de SWI-Prolog
Predicado help/0Abre la ventana de ayuda navegable:?- help.
Predicado help/1Abre la venta de ayuda y muestra información sobre el argumento:?- help(edit/1).
![Page 21: Introducción a SWI-Prolog - lcc.uma.eslopez/progdec/prolog/software/swi-prolog_intro.pdf · El GUI de SWI-Prolog Está basado en dos ventanas: o La ventana principal, con una línea](https://reader034.vdocuments.mx/reader034/viewer/2022052204/5b66ad117f8b9a345c8d526a/html5/thumbnails/21.jpg)
Edición de la línea de órdenes
Historial: cursor arriba/abajo Compleción automática: TAB?- cel<TAB>
Corrección (Do What I Mean):?- celos(A,B).Correct to: celoso(A, B)?