5. Entrada y Salida en PROLOG

Slides:



Advertisements
Presentaciones similares
Introducción a C#.
Advertisements

DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
TEMA 8. REDIRECCIONAMIENTOS
Instrumentación Virtual con LabVIEW
Unidad 1 DISEÑO DE ALGORITMOS ING. Nelwi Baez. MSC
Hola buen día, espero que disfrutes la clase
UNIDAD II: ALGORITMOS Y LENGUAJES
Elementos de Pascal Escribir un programa en Pascal que lea los valores de los catetos de un triángulo rectángulo y calcule y muestre la hipotenusa. program.
Fundamentos de la Programación Estructurada
Resolución de Problemas y Algoritmos Buffer - Read & Readln
LABVIEW FILE I/O CLASE 5.
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
EN EL ESTADO DE CAMPECHE BASE DE DATOS DE CONOCIMIENTOS
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Concepto de programa. Directorio Concepto de programa. Analisis del problema. Resolucion del problema. Desarroollo de un programa. Partes constitutivas.
Estructuras Compuestas.
Facultad Ingeniería Departamento de Sistemas e Industrial Módulo 2 Constructores Básicos Parte A rogramación de omputadores.
6. Operadores en PROLOG Definición de operadores propios
Tema: Funciones en Excel (II) Funciones de Texto
Servidor de Batalla Naval.
VISUAL BASIC CONSOLA Todas las ordenes o instrucciones se digitan dentro de sub Main() y End Sub ÁREA DE TRABAJO: Las aplicaciones de consola son aquellas.
Manipulación de caracteres e hileras de texto
Conceptos Básicos de Java
La estructura básica de los programas en java, algo a tener en cuenta y que debemos recordar siempre es el archivo debe llevar el nombre de la clase con.

Prolog PROgramming in LOGic

En Java las estructuras de repetición son las mismas que en C/C++.
Al término de la clase, el alumno reconoce las ventajas de usar JAVASCRIPT para un proyecto web.
Tema 3 Entrada y Salida.
UNIVERSIDAD DE MANAGUA I CUATRIMESTRE INTRODUCCION A LA PROGRAMACION
TRADUCTOR DE UN PROGRAMA
READ (*, *) WRITE(*; *) Formato libre Format → se utiliza para especificar la forma en que las variables son impresas o leídas en un programa. WRITE(*,
Fundamentos de Programación
ESTRUCTURAS CONTROL SECUENCIAL
Informática Ingeniería en Electrónica y Automática Industrial
Semana 5 Subprogramas..
Inteligencia artificial
Archivos.
Informática Ingeniería en Electrónica y Automática Industrial
Inteligencia artificial
Compiladores (23/04/ :35) Compiladores Tema 3 Análisis Lexicográfico Scanners.
Resolución de Problemas y Algoritmos Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Bahía Blanca - Argentina.
Teoría – Alejandro Gonzalez
FILTROS. Un filtro es un programa que recibe una entrada, la procesa y devuelve una salida. Relacionando filtros simples podemos hacer prácticamente cualquier.
Introducción Lenguaje de Programación ING2101 SECC Ayud. Ariel Fierro Sáez.
Programación en C para electrónicos
PARCIAL DE JUNIO DEL 2014 LENGUAJE DE PROGRAMACIÓN UN LENGUAJE SE PUEDE DEFINIR COMO UN CONJUNTO DE PALABRAS Y FORMAS DE EXPRESIÓN POR MEDIO DE.
introducción al lenguaje
Elementos básicos del lenguaje
Es un programa sorprendente con un diseño mejor y más eficaz que el de las versiones anteriores. Pero quizás le resulte poco familiar. Por ese motivo.
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
Ihr Logo PHP Parte 2 “php toma muchas sintaxis de lenguajes de alto nivel conocidos para poder trabajar”
SISTEMAS EXPERTOS LISTAS EN PROLOG Profesor: Joel Pérez González Abril 2010.
PRINCIPIOS DE PROGRAMACIÓN
“variables , sentencia if y bucles”
UNIDAD 4: Introducción a la Lógica Computacional Objetivo : Interpretar y aplicar adecuadamente los fundamentos básicos de la estructura y funcionamiento.
Práctica Profesional PHP.
JOIN EN MYSQL Bueno en esta presentación mostrare cosas acerca de los usos de la sentencia JOIN en mysql , mediante esta presentación planeo mostrar los.
Lic. Carla Aguirre Montalvo
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
EL TIPO DE DATO LOGICO y constantes.
Curso: Fundamentos de Computación
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
Lección 6 Cadena de Caracteres (Strings) y Manejo de archivos (File I/O)
Lenguaje de Programación II PLAN DE EVALUACIÓN CONTENIDO MODALIDAD DE EVAL. PONDERACIÓN INTRODUCCIÓN BÁSICA AL LENGUAJE DE PROGRAMACIÓN.
Visual Basic Prof.: Carol Briones García. Uso de Archivos  Definición  Es un conjunto de información que se almacena en algún medio de escritura que.
Módulo III.- Recursos en UPSA VIRTUAL Este módulo explica como configurar los distintos recursos que pueden encontrarse en un curso de MOODLE. Recurso:
Entrada y Salida en C++, Estructuras de Control Prof. Manuel B. Sánchez.
Estructuras Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 25.
Transcripción de la presentación:

5. Entrada y Salida en PROLOG Escritura de términos Lectura de términos Escritura y lectura de caracteres Escritura en fichero Lectura de fichero

1. Escritura de términos (I) Predicado predefinido “write(X)”: Siempre se satisface Si X está instanciada, se muestra en pantalla. Si no, se saca la variable interna (‘_G244’). Nunca se intenta re-satisfacer. ?- write(Beatriz). _G244 Beatriz = _G244 ; No ?- write("Beatriz"). [66, 101, 97, 116, 114, 105, 122] Yes ?- write(beatriz). beatriz Yes ?- write('Beatriz'). Beatriz

Escritura de términos (II) “nl” provoca un salto de línea. (?- nl.) “tab(X)” escribe X espacios en blanco. No coincide con la función de una máquina de escribir convencional. Ambas sólo se satisfacen una sola vez. “display(X)”  muestra X sin interpretar los functores/operadores.

Escritura de términos (III) ?- nl, write('Beatriz'), tab(5), write('Gonzalez'), nl, write('Francisco'), tab(5), write('Perez'). Beatriz Gonzalez Francisco Perez Yes ?- L = [1, 2, 3, 4, 5], write(L). [1, 2, 3, 4, 5] L = [1, 2, 3, 4, 5] yes ?- L = [1, 2, 3, 4, 5], display(L). .(1, .(2, .(3, .(4, .(5, [])))))

Escritura de términos (IV) ?- write(a+b*c/d), nl, display(a+b*c/d), nl. a+b*c/d +(a, /(*(b, c), d)) Yes Por ejemplo, el operador “+” es declarado infijo con dos argumentos. “display” puede ser útil para recordar el orden de precedencia: ?- write((a+b)*c/d), nl, display((a+b)*c/d), nl. (a+b)*c/d /(*(+(a, b), c), d)

2. Lectura de términos (I) “read(X)”, lee por teclado un término, que se instanciará a la variable X. El término debe ir seguido de “.” y un carácter no imprimible como el espacio o el retorno de carro. hola :- write('Nombre: '), read(Nombre), write('Primer Apellido: '), read(Apellido1), write('Segundo Apellido: '), read(Apellido2), nl, write('Hola '), write(Nombre), tab(1), write(Apellido1), tab(1), write(Apellido2). ?- hola. Nombre: Carlos. Primer Apellido: Alonso. Segundo Apellido: Gonzalez. Hola _L131 _L132 _L133 (Lee términos: funciona con minúsculas sólo)

Lectura de términos (II) ?- hola. Nombre: carlos. Primer Apellido: alonso. Segundo Apellido: gonzalez. Hola carlos alonso gonzalez Nombre: ‘Carlos’. Primer Apellido: ‘Alonso’. Segundo Apellido: ‘Gonzalez’. Hola Carlos Alonso Gonzalez Las mayúsculas se utilizan para designar a variables, por eso se mostraba el valor del puntero a estas supuestas variables: Carlos, Alonso y Gonzalez. Podemos introducir términos en minúsculas, o cadenas.

Lectura de términos (III) ¿Qué ocurre si ponemos? ?- hola. Nombre: “Carlos”. Primer Apellido: “Alonso”. Segundo Apellido: “Gonzalez”. Hola ?? Hola [67, 97, 114, 108, 111, 115] [65, 108, 111, 110, 115, 111] [71, 111, 110, 122, 97, 108, 101, 122]

3. Escritura y lectura de caracteres (I) El carácter es la unidad más pequeña objeto de lectura o escritura. Si una variable está instanciada a un código ASCII (entero positivo): “put(X)” escribe el correspondiente carácter. No admite resatisfacción. ?- put(104), put(111), put(108), put(97). hola ?- X = 104, Y = 111, Z = 108, W=97, put(X), put(Y), put(Z), put(W). hola.

Escritura y lectura de caracteres (II) “get0(X)” y “get(X)” son objetivos que se satisfacen si X no está instanciada. Si X está instanciada, intenta hacer matching con entrada. Además, no se resatisfacen. Diferencia: “get0(X)” espera a instanciar en X el primer carácter tecleado, mientras que “get(X)” captura el primero imprimible. ?- get(X). |:<CR> |: . X = 46 ?- get0(X). |: <CR> X = 10 ;

Ejercicios: L/E de términos Ejemplo: escritura estructurada de listas. La complejidad de la escritura de listas se debe al posible anidamiento con otras listas o estructuras. muestra(X, I): “muestra términos lista” X debe instanciar a la lista que se quiere mostrar I espacios sangría inicial ?- muestra([1, 2, 3], 1). 1 2 3 ?- muestra([1,2,[3,4], 5, 6], 6). 4 5 6

4. Escritura en fichero (I) Existe un Canal de salida activo: por defecto, la pantalla. “tell(X)”, establece la salida según lo instanciado por X. Es un predicado que requiere que X esté instanciada; en caso contrario, se produce un error. Como objetivo, no permite la resatisfacción.

Escritura en fichero (II) Ejercicio: Desviar la salida del predicado “muestra” hacia el fichero c:\tmp\salida.txt ?- tell(‘c:/tmp/salida.txt’). ?- muestra([1, 2, [3, 4], 5, 6], -3). ?- told. Este último predicado cierra el fichero y restablece la pantalla como canal de salida.

Escritura en fichero (III) Para averiguar el canal activo, se emplea el predicado “telling(X)”. Aquí X está por instanciar. ?- telling(X). X = user ; No ?- tell('d:/tmp/salida.prolog'). Yes X = '$stream'(112102) ; ?- told.

Escritura en fichero (IV) Para volver a la pantalla como canal activo, sin cerrar el fichero abierto previamente, se emplea: “tell(user)”. ?- tell(‘c:/tmp/pp1.txt’), muestra([1, 2, [3, 4], 5, 6], -3), tell(user), muestra([1, 2, [3, 4], 5, 6]), tell(‘c:/tmp/pp2.txt’), muestra([7, [8, [9, [0]]]], 0), told, muestra([7, [8, [9, [0]]]], 0), told. Ejercicio: insertar “telling” en esta secuencia para averiguar el canal activo.

5. Lectura de ficheros (I) Las mismas consideraciones, sólo que: El canal de entrada por defecto será el teclado (user). El predicado “tell” se sustituye por “see”: ?- see(X). ?- seeing(X). ?- seen. Si la lectura se efectúa para ampliar la base de conocimiento, se empleará “consult”.

Lectura de ficheros (II) Ejemplo: construir una base de conocimiento fruto de la unión otras tres. ?- consult(‘muestra'). % muestra compiled 0.00 sec, 40 bytes ?- consult(‘campeones'). % campeones compiled 0.00 sec, 80 bytes ?- consult(‘densidad'). % Densidad compiled 0.02 sec, 60 bytes ?- [‘muestra’, ‘campeones’, ‘densidad’].

UNIVERSIDAD DE VALLADOLID ENTRADAS y SALIDAS UNIVERSIDAD DE VALLADOLID

L/E de términos (II) pp([H|T], I) :- !, J is I+3, pp(H, J), ppx(T, J), nl. pp(X, I) :- tab(I), write(X), nl. ppx([], _). ppx([H|T], I) :- pp(H, I), ppx(T, I). ?- pp([1,2,[3,4], 5, 6], 0). 1 2 3 4 5 6 Yes I es un contador de columna ?- pp([1,2,[3,4], 5, 6], 7). 1 2 3 4 5 6 Yes

Ejercicios: L/E de términos Crear un predicado denominado espacios(X), cuya función sea similar a tab(X) mediante el empleo de put(32) de manera recursiva. Ejercicio 2: Empleando una estrategia similar al ejercicio anterior, simular igualmente al predicado “write” mediante otro denominado “escribecadena” utilizando el desglose de las listas –cadenas de caracteres- (cabeza y cola) y “put”.

Escritura y lectura de caracteres (IV) Ejercicio 3: ?- leer(S). El ladron, que es muy habil con las manos, le birlo la cartera a Juan. S=[el, ladron, ‘,’, que, es, muy, habil, con, las, manos, ‘,’, le, birlo, la, cartera, a, juan] Consideraciones: Los espacios son separadores de palabras. , ; : ? ! . Son palabras por sí mismas . ! ? Son la última palabra de la frase