Metodología de Programación I Tutorial de Prolog (3/3)

Documentos relacionados
5. Entrada y Salida en PROLOG

Programación en java. Estructuras algorítmicas

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIFICADORES COMO LOCALIDADES DE MEMORIA

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

Informática Ingeniería en Electrónica y Automática Industrial

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

Estructura de Datos: Archivos

Principios de Computadoras II

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

3 ESTRUCTURAS DE CONTROL REPETITIVAS. BUCLES

Tema 3.- Predicados y sentencias condicionales

VARIABLES LOCALES Y VARIABLES GLOBALES

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa

PROGRAMACIÓN ORIENTADA A OBJETOS

CAPITULO II. ENTIDADES PRIMITIVAS PARA EL DESARROLLO DE ALGORITMOS

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

LENGUAJE DE PROGRAMACION I. Ing. JAVIER ECHEGARAY ROJO Ing. WILDER ROMAN MUNIVE. Ing. Javier Echegaray Rojo / Ing. Wilder Román Munive Pag 1

PHP: Lenguaje de programación

DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA

Estructuras en LabVIEW.

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo

Ficha de Aprendizaje N 13

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

GUIA No 5. CREACIÓN DE SubVI s

OPERADORES Y EXPRESIONES

Estructuras de Control

Es un software de simulación que ejecuta programas en lenguaje de ensamblador para procesadores con arquitectura MIPS32.

LENGUAJE. Tema 2 Elementos de un programa

6 ARCHIVOS DXF 12 Formato general

2. ENTIDADES PRIMITIVAS PARA EL DESARROLLO DE ALGORITMOS

Estructuras de control

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

6.1.- Introducción a las estructuras de datos Tipos de datos Arrays unidimensionales: los vectores Operaciones con vectores.

Lección 2 Introducción al lenguaje C

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

5. Sentencias selectivas o condicionales

El lenguaje C. 1. Identificadores, constantes y variables

Es toda la información que utiliza el computador. Según sea la información que guardemos en los datos, se clasifican en los siguientes tipos:

REFERENCIA DEL LENGUAJE

Lenguaje de programación C. Introducción

UNIDAD I. ALGORITMOS

Programación Funcional Haskell Clase 21

ENTIDADES PRIMITIVAS PARA EL DESARROLLO DE ALGORITMOS Tipos de datos Expresiones Operadores y operandos Identificadores como localidades de memoria

TP N 4 Redirección de entrada y salida estándar

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

LEER Y ESCRIBIR ARCHIVOS DE TEXTO CON PHP. FUNCIONES FOPEN (MODOS), FGETS, FPUTS, FCLOSE Y FEOF. EJEMPLOS (CU00836B)

Algoritmos. Diagramas de Flujo. Informática IV. L. S. C. Heriberto Sánchez Costeira

Manual de turbo pascal

Instituto Tecnológico de Celaya

Resolución de Problemas y Algoritmos Clase 6: Repetición (continuación)

TEMA 4. ESTRUCTURAS DE CONTROL

1 ELEMENTOS BASICOS DEL LENGUAJE

Flujos (streams) Programación. Licenciatura Lingüística y Nuevas Tecnologias Nadjet Bouayad-Agha

MANUAL DE RUBY (PARTE I) Luis José Sánchez González

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Tema: Entorno a C# y Estructuras Secuenciales.

Clase 4: Un poco más de Python

Iniciando con Oracle. Índice de contenido. Ingresando a Oracle. Cambiando Su Contraseña. Ingresando un Comando SQL en SQL*Plus

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Fundamentos de programación

GUÍA BÁSICA DE SCHEME v.4

Capítulo 7 OPERADORES Y EXPRESIONES. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Informática y Programación Escuela de Ingenierías Industriales y Civiles Curso 2010/2011

El lenguaje C. 3. Una instrucción que se ejecutará si la condición es verdadera.

Estatutos de Control C# Estatutos de Decisión (Selección)

Operadores aritméticos: suma (+), resta (-), producto (*), cociente (/) y potencia (**).

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

PRÁCTICA ALGORÍTMICA: EJERCICIOS PROPUESTOS

Estructuras de repetición

Computación II. Introducción a Visual Basic

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

4. Predicados predefinidos

Programcaión Básica. Secuencias de Control y Repetición. Arturo Vega González.

Programación. Test Autoevaluación Tema 3

COMANDOS VISUAL BASIC. Comandos Básicos De Visual Basic. Programación Básica

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>}

TIPOS DE CAMPOS Cada Sistema de Base de Datos posee tipos de campos que pueden ser similares o diferentes.

MANEJO DE EXPRESIONES REGULARES

FUNDAMENTOS DE INFORMÁTICA

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Ejemplos de conversión de reales a enteros

Planificaciones Algoritmos y Programación I. Docente responsable: AZCURRA DIEGO ANDRES. 1 de 5

Actividad de Evaluación Brandon Emmanuelle Cuevas Rangel GPO: 303 Carrera: Informática 3er Semestre Joel Rocha Barocio Cienega de Flores N.L.

INICIACIÓN A LA PROGRAMACIÓN EN C

2.1.- EJEMPLO DE UN PROGRAMA FORTRAN

Teoría de la Computación

Herramientas de Programación. M.C. Juan Carlos Olivares Rojas

Resolución de problemas mediante algoritmos

EL TECLADO Y SUS PARTES

Transcripción:

Metodología de Programación I Tutorial de Prolog (3/3) Dr. Alejandro Guerra-Hernández Departamento de Inteligencia Artificial Facultad de Física e Inteligencia Artificial aguerra@uv.mx http://www.uv.mx/aguerra Maestría en Inteligencia Artificial 2008

Objetivos Usar los predicados predefinidos en ISO Prolog para leer y escribir en la terminal (teclado y pantalla) o en un archivo. Usar el código ASCII para manipular cadenas de caracteres. Entender la dimensión semántica de los operadores de entrada y salida (predicados que siempre fallan al reconsiderar (backtracking)).

write/1 y nl/0 El predicado de salida más importante es write/1, que ya hemos usado en algunos ejemplos. write/1 toma un argumento que debe ser un término Prolog. La evaluación de este predicado causa (bye bye programación lógica pura) que su argumento sea escrito en el flujo de salida actual (por default el monitor). Más adelante definiremos el concepto de flujo, por ahora asuman que ese término denota al monitor. También hemos utilizado el predicado nl/0 que denota una nueva ĺınea en el flujo de salida.

Ejemplos Vemos algunos ejemplos del uso de write/1 y nl/0:?- write (38), nl. 38?- write ( una cadena de caracteres ), nl. una cadena de caracteres?- write ([a,b,c,d,[e,f,g ]]), nl. [a, b, c, d, [e, f, g]]?- write ( mi_predicado_tonto (a)), nl. mi_predicado_tonto ( a)?- write ( Maestría en ), nl, write ( IA ),nl. Maestría en IA

writeq/1 Observen que el apóstrofo se pierde en la salida al usar write/0. Si es importante conservarlo, se puede usar writeq/1:?- writeq ( una cadena de caracteres ). una cadena de caracteres?- writeq ( mira mis apóstrofos ). mira mis apóstrofos?- write ( ahora no los ves ). ahora no los ves

read/1 El predicado read/1 provee la captura de términos de entrada. Su único argumento debe ser una variable. Su evaluación causa (efecto secundario) que un término sea leído del flujo de entrada actual (teclado). La lectura del término termina con un punto. y un carácter en blanco, por ejemplo, un salto de ĺınea o un espacio. Al momento de la lectura el prompt de Prolog suele cambiar, por ejemplo a :

Ejemplos El argumento de read/1 unifica con el término leído:?- read (X). : juan. X = juan.?- read (X). : mi_predicado_tonto ( b). X = mi_predicado_tonto ( b).?- read (Y). : alejandro guerra. Y = alejandro guerra. Si la variable ya tuviese un valor asociado, la meta tiene éxito sólo si el nuevo valor unifica con el anterior!?- X= alfredo, read (X). : juan. false.

ASCII Para algunas aplicaciones es más conveniente bajar el nivel de las operaciones de E/S a caracteres. Por ejemplo, usando código ASCII para manipular cadenas. valor signo valor signo valor signo valor signo 9 tab 40 ( 59 ; 94 ˆ 10 eof 41 ) 60 95 32 espacio 42 * 61 = 96 33! 43 + 62 > 97 122 a z 34 44, 63? 123 { etc. (los caracteres en blanco < 32).

Salida de caracteres Se utiliza en predicado put/1 cuyo argumento debe ser un número en 0... 255?- put (97), nl. a?- put (122), nl. z?- put (64), nl. @

Entrada de caracteres Se utilizan los predicados get0/1 y get/1. El primero puede aceptar caracteres en blanco. El segundo no.?- get0 (X). : a X = 97.?- get (X). : a X = 97.?- get0 (X). : X = 32.?- get (X). : :. X = 46.

Preguntita Qué hace el siguiente programa lógico con la meta readin? 1 readin :- get0 (X), process (X). 2 process (42). 3 process (X) :- X =\= 42, write (X), nl, readin.

Corrida El predicado lee una secuencia de caracteres hasta encontrar *. Imprime uno a uno de estos caracteres excluyendo *.?- readin. : hola * 104 111 108 97

Contador de caracteres Y si queremos contar el número de caracteres? 1 cuenta ( Total ) :- cuenta_aux (0, Total ). 2 cuenta_aux (Acc, Res ) :- 3 get0 (X), process (X,Acc, Res ). 4 5 process (42, Acc, Acc ). 6 process (X,Acc, Res ) :- 7 X =\=42, Acc1 is Acc +1, 8 cuenta_aux (Acc1, Res ). Corrida:?- cuenta (X). : hola * X = 4 Y un cuenta palabras para la tarea? tarea :)

Cuenta vocales 1 cuenta_vocales ( Total ) :- cuenta_vocales_aux (0, Total ). 2 cuenta_vocales_aux (Acc, Res ) :- 3 get0 (X), process_vocales (X,Acc, Res ). 4 5 process_vocales (42, Acc, Acc ). 6 process_vocales (X,Acc, Res ) :- 7 X =\=42, processchar (X,Acc,N), 8 cuenta_vocales_aux (N, Res ). 9 10 processchar (X,Acc,N) :- vocal (X), N is Acc +1. 11 processchar (_,Acc, Acc ). 12 13 vocal (65). %% % Mayúsculas 14 vocal (69). vocal (73). 15 vocal (79). vocal (85). 16 vocal (97). %% % Minúsculas 17 vocal (101). vocal (105). 18 vocal (111). vocal (117).

Corridas cuenta vocales?- cuenta_vocales (X). : andaba herrado * X = 6?- cuenta_vocales (Z). : kdvzktvsk * Z = 0

Salida: tell/1, told/0 y telling/1 Para cambiar el flujo de salida actual se usa tell/1 cuyo argumento es una variable o un átomo representando un nombre de archivo. Ej: tell( salida.txt ) El flujo de salida estándar es user. El predicado told/0 cierra el flujo actual de salida y vuelva a establecer user como el flujo actual de salida. El argumento de telling/1 suele ser una variable que unifica con el nombre del flujo de salida actual. Ej:?- telling (X). X = user.

Entrada: see/1, seen/0 y seeing/1 El argumento de see/1 suele ser una variable o un átomo representando el nombre de un archivo. Ej: see( mientrada.txt ) Al evaluar este predicado, el archivo se vuelve el flujo de entrada actual. Si no es posible abrir el archivo se genera un error. El flujo de entrada estándar también es user. Para cerrar el flujo actual de entrada se usa seen/0. El argumento de seeing/1 suele ser una variable que unifica con el identificador del flujo de entrada actual.

Lectura de archivos El predicado read/1 normalmente toma como argumento una variable que unifica con la ĺınea leída del flujo actual de entrada. Si el final del archivo es alcanzado al usar read/1 la variable unifica con el átomo end of file Si el final de archivo se alcanzo usando get0/1 ó get/1, el valor unificado con la variable depende de la implementación, pero siempre está fuera del rango de los caracteres ASCII, por ejemplo -1.

Ejemplo Contar vocales de un archivo. 1 vocs_file (Arch, Total ) :- 2 see ( Arch ), 3 cuenta_vocales_file (0, Total ), 4 seen. 5 6 cuenta_vocales_file ( Acc, Res ) :- 7 get0 (X), process_vocales_file (X,Acc, Res ). 8 9 process_vocales_file (-1,Acc, Acc ). 10 process_vocales_file (X, Acc, Res ) :- 11 X =\= -1, processchar (X, Acc, N), 12 cuenta_vocales_file (N, Res ). Y la corrida:?- vocs_file ( / Users / aguerra / intro. tex,r). R = 2184

Ejemplo El predicado copychars/1 copia una secuencia de caracteres que termina en! de la terminal a un archivo especificado: 1 copychars ( Salida ):- 2 telling ( Actual ), tell ( Salida ), 3 copychars_aux, told, tell ( Actual ). 4 5 copychars_aux :- get0 ( C), process_copy ( C). 6 7 process_copy (33). 8 process_copy (C) :- 9 C =\= 33, put ( C), copychars_aux.

Ejercicio Escriban un predicado triangulo/1 cuyo argumento es un entero positivo y su salida es como sigue:?- triangulo (5). * * * * * * * * * * * * * * *