![Page 1: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/1.jpg)
PROGRAMACIÓN DECLARATIVA INGENIGERÍA NFORMÁTICA
CUARTO CURSO
PRIMER CUATRIMESTRE
Tema 7.- Lectura y escritura
UNIVERSDAD DE CÓRDOBA
ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA
DEPARTAMENTO DE
INFORMÁTICA Y ANÁLISIS NUMÉRICO
![Page 2: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/2.jpg)
2
Primera
parte:
Scheme
Tema 1.- Introducción al lenguaje Scheme
Tema 2.- Expresiones y funciones
Tema 3.- Predicados y sentencias condicionales
Tema 4.- Iteración y recursión
Tema 5.- Tipos de datos compuestos
Tema 6.- Abstracción de datos
Tema 7.- Lectura y escritura
Tema 8.- Introducción al lenguaje Prolog
Tema 9.- Elementos básicos de Prolog
Tema 10.- Listas
Tema 11.- Reevaluación y el “corte”
Tema 12.- Entrada y salida
Segunda
parte: Prolog
PROGRAMACIÓN DECLARATIVA PROGRAMA
![Page 3: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/3.jpg)
3
Primera parte: Scheme
PROGRAMACIÓN DECLARATIVA PROGRAMA
Tema 1.- Introducción al lenguaje Scheme
Tema 2.- Expresiones y funciones
Tema 3.- Predicados y sentencias condicionales
Tema 4.- Iteración y recursión
Tema 5.- Tipos de datos compuestos
Tema 6.- Abstracción de datos
Tema 7.- Lectura y escritura
![Page 4: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/4.jpg)
4
Programación declarativa Tema 7.- Lectura y escrtitura
Índice
1. Interacción con el sistema
2. Apertura de ficheros y cierre de puertos
3. Lectura
4. Escritura
5. Ejemplos de lectura y escritura
6. Interacción entre procedimientos y ficheros
![Page 5: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/5.jpg)
5
Programación declarativa Tema 7.- Lectura y escrtitura
Índice
1. Interacción con el sistema
2. Apertura de ficheros y cierre de puertos
3. Lectura
4. Escritura
5. Ejemplos de lectura y escritura
6. Interacción entre procedimientos y ficheros
![Page 6: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/6.jpg)
6
1. Interacción con el sistema
• Ejecución de un programa
• Transcripción de una sesión interactiva
![Page 7: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/7.jpg)
7
1. Interacción con el sistema
• Ejecución de un programa
• Transcripción de una sesión interactiva
![Page 8: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/8.jpg)
8
1. Interacción con el sistema
• Ejecución de un programa
o Ejecución usando la sentencia load
o Ejecución usando la interfaz gráfica
![Page 9: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/9.jpg)
9
1. Interacción con el sistema
• Ejecución de un programa
o load
Sintaxis
(load fichero)
fichero: nombre de un fichero existente
Significado
Interpreta secuencialmente las instrucciones
del fichero
Si se definen variables o funciones entonces
pueden ser utilizadas posteriormente.
![Page 10: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/10.jpg)
10
1. Interacción con el sistema
• Ejecución de un programa
o load
Ejemplo1
(load “hanoi.rkt”)
• Ejemplo 2
(load “newton.rkt”)
;; se ejecuta la función definida en el fichero
(newton (lambda (x) (- (* x x) 2)) 1)
1,4142…
![Page 11: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/11.jpg)
11
1. Interacción con el sistema
• Ejecución de un programa
o Ejecución usando una interfaz gráfica
Pulsar
![Page 12: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/12.jpg)
12
1. Interacción con el sistema
• Ejecución de un programa
• Transcripción de una sesión interactiva
![Page 13: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/13.jpg)
13
1. Interacción con el sistema
• Transcripción de una sesión interactiva
o Se utiliza para depurar el código
o Tipos
Transcripción desde la ventana de interacciones
Transcripción usando una interfaz gráfica
![Page 14: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/14.jpg)
14
1. Interacción con el sistema
• Transcripción de una sesión interactiva
o Transcripción desde la ventana de interacciones
o transcript-on y transcript-off
Sintaxis
(transcript-on fichero)
…
;; Interacciones
….
(transcript-off)
![Page 15: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/15.jpg)
15
1. Interacción con el sistema
• Transcripción de una sesión interactiva
o Transcripción desde la ventana de interacciones
o transcript-on y transcript-off
Significado
Almacena en el fichero las interacciones del
usuario con el intérprete
(transcript-on fichero) crea el fichero en el
que se almacenarán las interacciones
(transcrip-off) cierra el fichero activo y
finaliza la transcripción
![Page 16: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/16.jpg)
16
1. Interacción con el sistema
• Transcripción de una sesión interactiva
o Transcripción desde la ventana de interacciones
o transcript-on y transcript-off
Observación
Solamente puede haber un fichero activo en
un mismo instante,
aunque algunos intérpretes pueden ser más
permisivos.
![Page 17: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/17.jpg)
17
1. Interacción con el sistema
• Transcripción de una sesión interactiva
o Transcripción desde la ventana de interacciones
o transcript-on y transcript-off
Ejemplo
(transcript-on “salida.txt”)
(newton (lambda (x) (- (* x x) 2)) 1)
1.4142165798805022
(transcript-off)
![Page 18: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/18.jpg)
18
1. Interacción con el sistema
• Transcripción de una sesión interactiva
o Transcripción desde la ventana de interacciones
o transcript-on y transcript-off
Ejemplo
Contenido del fichero “salida.txt”
> (newton (lambda (x) (- (* x x) 2)) 1)
1.4142165798805022
(transcript-off)
![Page 19: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/19.jpg)
1. Interacción con el sistema
• Transcripción de una sesión interactiva
o Transcripción usando una interfaz gráfica
19
Pulsar
![Page 20: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/20.jpg)
20
Programación declarativa Tema 7.- Lectura y escrtitura
Índice
1. Interacción con el sistema
2. Apertura de ficheros y cierre de puertos
3. Lectura
4. Escritura
5. Ejemplos de lectura y escritura
6. Interacción entre procedimientos y ficheros
![Page 21: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/21.jpg)
21
2. Apertura de ficheros y cierre de puertos
• Apertura de un fichero
• Funciones de ficheros y directorios
• Cierre de un puerto
• Predicados sobre puertos de entrada y salida
![Page 22: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/22.jpg)
22
2. Apertura de ficheros y cierre de puertos
• Apertura de un fichero
• Funciones de ficheros y directorios
• Cierre de un puerto
• Predicados sobre puertos de entrada y salida
![Page 23: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/23.jpg)
23
2. Apertura de ficheros y cierre de puertos
• Apertura de un fichero
o open-input-file
o open-output-file
![Page 24: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/24.jpg)
24
2. Apertura de ficheros y cierre de puertos
• Apertura de un fichero
o open-input-file
Sintaxis
(open-input-file fichero)
fichero: nombre de un fichero que debe existir
Devuelve un puerto de entrada.
Significado
Abre el fichero para lectura y lo asocia a un
puerto de entrada
Las operaciones de lectura en el fichero se
realizarán a través del puerto de entrada.
![Page 25: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/25.jpg)
25
2. Apertura de ficheros y cierre de puertos
• Apertura de un fichero
o open-input-file
Ejemplo
(define p1 (open-input-file “datos.txt”))
p1
#<input-port: … datos.txt>
![Page 26: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/26.jpg)
26
2. Apertura de ficheros y cierre de puertos
• Apertura de un fichero
o open-output-file
Sintaxis
(open-output-file fichero)
fichero: nombre de un fichero que se va crear
Devuelve un puerto de salida.
Significado
Crea el fichero para escribir y lo asocia a un
puerto de salida
Las operaciones de escritura en el fichero se
realizarán a través del puerto de salida.
![Page 27: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/27.jpg)
27
2. Apertura de ficheros y cierre de puertos
• Apertura de un fichero
o open-output-file
Ejemplo
(define p2 (open-output-file “salida.txt”))
p2
#<output-port: … salida.txt>
![Page 28: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/28.jpg)
28
2. Apertura de ficheros y cierre de puertos
• Apertura de un fichero
• Funciones de ficheros y directorios
• Cierre de un puerto
• Predicados sobre puertos de entrada y salida
![Page 29: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/29.jpg)
29
2. Apertura de ficheros y cierre de puertos
• Funciones de ficheros y directorios
o file-exists?
o directory-exist?
o Otras funciones
![Page 30: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/30.jpg)
30
2. Apertura de ficheros y cierre de puertos
• Funciones de ficheros y directorios
o file-exists?
Sintaxis
(file-exists? nombre)
Significado
Devuelve #t si nombre es un fichero (no un
directorio)
![Page 31: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/31.jpg)
31
2. Apertura de ficheros y cierre de puertos
• Funciones de ficheros y directorios
o directory-exists?
Sintaxis
(directory-exists? nombre)
Significado
Devuelve #t si nombre es un directorio
![Page 32: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/32.jpg)
32
2. Apertura de ficheros y cierre de puertos
• Funciones de ficheros y directorios
o Otras funciones:
o Ficheros
o Directorios
Más información: http://docs.racket-lang.org/reference/Filesystem.html?q=file
![Page 33: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/33.jpg)
33
2. Apertura de ficheros y cierre de puertos
• Funciones de ficheros y directorios
o Otras funciones
o Ficheros
link-exists?
delete-file
rename-file-or-directory
file-or-directory-modify-seconds
file-or-directory-permissions
file-or-directory-identity
file-size
copy-file
make-file-or-directory-link
![Page 34: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/34.jpg)
34
2. Apertura de ficheros y cierre de puertos
• Funciones de ficheros y directorios
o Otras funciones:
o Directorios
current-directory
current-drive
make-directory
delete-directory
directory-list
filesystem-root-list
![Page 35: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/35.jpg)
35
2. Apertura de ficheros y cierre de puertos
• Apertura de un fichero
• Funciones de ficheros y directorios
• Cierre de un puerto
• Predicados sobre puertos de entrada y salida
![Page 36: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/36.jpg)
36
2. Apertura de ficheros y cierre de puertos
• Cierre de un puerto
o close-input-port
o close-output-port
![Page 37: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/37.jpg)
37
2. Apertura de ficheros y cierre de puertos
• Cierre de un puerto
o close-input-port
Sintaxis
(close-input-port puerto)
puerto: nombre de un puerto de entrada
Significado
Cierra el fichero asociado al puerto de
entrada
Ejemplo
(close-input-port p1)
![Page 38: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/38.jpg)
38
2. Apertura de ficheros y cierre de puertos
• Cierre de un puerto
o close-output-port
Sintaxis
(close-output-port puerto)
puerto: nombre de un puerto de salida
Significado
Cierra el fichero asociado al puerto de salida
Ejemplo
(close-output-port p2)
![Page 39: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/39.jpg)
39
2. Apertura de ficheros y cierre de puertos
• Apertura de un fichero
• Funciones de ficheros y directorios
• Cierre de un puerto
• Predicados sobre puertos de entrada y salida
![Page 40: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/40.jpg)
40
2. Apertura de ficheros y cierre de puertos
• Predicados sobre puertos de entrada y salida
o input-port?
o output-port?
![Page 41: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/41.jpg)
41
2. Apertura de ficheros y cierre de puertos
• Predicados sobre puertos de entrada y salida
o input-port?
Sintaxis
(input-port? objeto)
Significado
Comprueba si objeto es un puerto de entrada
Ejemplo
(input-port? p1)
#t
![Page 42: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/42.jpg)
42
2. Apertura de ficheros y cierre de puertos
• Predicados sobre puertos de entrada y salida
o output-port?
Sintaxis
(output-port? objeto)
Significado
Comprueba si objeto es un puerto de salida
Ejemplo
(output-port? p2)
#t
![Page 43: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/43.jpg)
43
Programación declarativa Tema 7.- Lectura y escrtitura
Índice
1. Interacción con el sistema
2. Apertura de ficheros y cierre de puertos
3. Lectura
4. Escritura
5. Ejemplos de lectura y escritura
6. Interacción entre procedimientos y ficheros
![Page 44: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/44.jpg)
44
3. Lectura
• current-input-port
• read
• read-char
• peek-char
• char-ready?
• eof-object?
![Page 45: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/45.jpg)
45
3. Lectura
• current-input-port
o Significado
Devuelve el puerto de entrada actual
Generalmente, este puerto está asociado al
teclado
El procedimiento with-input-from-file puede
asociar un fichero al puerto de entrada actual
(véase el apartado nº 6)
![Page 46: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/46.jpg)
46
3. Lectura
• read
o Sintaxis
(read [puerto])
puerto: puerto de entrada asociado a un fichero
de lectura; es opcional.
Si se omite, se utiliza el puerto de entrada actual
o Significado
Lee un objeto del fichero o dispositivo asociado al
puerto.
Se actualiza el puerto para que se coloque al
principio del siguiente objeto.
![Page 47: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/47.jpg)
47
3. Lectura
• read
o Ejemplo
(display "Escriba un número --> ")
(define dato (read))
Escriba un número -->
dato
9
9 eof
![Page 48: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/48.jpg)
48
3. Lectura
• read
o Ejemplo
(define p1 (open-input-file “datos.txt”))
(display “Se lee un número del fichero ”)
(define dato (read p1))
(display dato)
…
![Page 49: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/49.jpg)
49
3. Lectura
• read-char
o Sintaxis
(read-char [puerto])
puerto: puerto de entrada asociado a un fichero
de lectura; es opcional.
Si se omite, se utiliza el puerto de entrada actual
o Significado
Lee un carácter del fichero o dispositivo asociado
al puerto
Se actualiza el puerto para que se coloque en el
siguiente carácter
![Page 50: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/50.jpg)
50
3. Lectura
• read-char
o Ejemplo
(display "Escriba un carácter--> ")
(define tecla (read-char))
Escriba un carácter-->
tecla
#\a
a eof
![Page 51: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/51.jpg)
51
3. Lectura
• read-char
o Ejemplo
(define p1 (open-input-file “datos.txt”))
(display “Se lee un carácter del fichero ”)
(define dato (read-char p1))
(display dato)
…
![Page 52: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/52.jpg)
52
3. Lectura
• peek-char
o Sintaxis
(peek-char [puerto])
puerto: puerto de entrada asociado a un fichero
de lectura; es opcional.
Si se omite, se utiliza el puerto de entrada actual
o Significado
Lee un carácter del fichero o dispositivo asociado
al puerto de entrada actual
No se actualiza el puerto para que se coloque en
el siguiente carácter
![Page 53: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/53.jpg)
53
3. Lectura
• peek-char
o Ejemplo
(display "Escriba un carácter--> ")
(define tecla (peek-char))
Escriba un carácter-->
tecla
#\a
a eof
![Page 54: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/54.jpg)
54
3. Lectura
• peek-char
o Ejemplo
(define p1 (open-input-file “datos.txt”))
(display “Se lee un carácter del fichero ”)
(define dato (peek-char p1))
(display dato)
…
![Page 55: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/55.jpg)
55
3. Lectura
• char-ready?
o Sintaxis
(char-ready? [puerto] )
puerto: puerto de entrada asociado a un fichero
de lectura; es opcional.
Si se omite, se utiliza el puerto de entrada actual
o Significado
Devuelve verdadero #t si hay un carácter
preparado en el puerto.
En caso contrario, devuelve falso #f.
![Page 56: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/56.jpg)
56
3. Lectura
• char-ready?
o Ejemplo
(define p1 (open-input-file “datos.txt”))
(if (char-ready? p1)
…
![Page 57: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/57.jpg)
57
3. Lectura
• eof-object?
o Sintaxis
(eof-object? objeto)
o Significado
Devuelve #t si y solamente si el argumento es el
objeto fin de fichero #<eof>
En caso contario, devuelve #f
![Page 58: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/58.jpg)
58
Programación declarativa Tema 7.- Lectura y escrtitura
Índice
1. Interacción con el sistema
2. Apertura de ficheros y cierre de puertos
3. Lectura
4. Escritura
5. Ejemplos de lectura y escritura
6. Interacción entre procedimientos y ficheros
![Page 59: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/59.jpg)
59
4. Escritura
• current-output-port
• display
• write
• write-char
• newline
![Page 60: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/60.jpg)
60
4. Escritura
• current-output-port
o Significado
Devuelve el puerto de salida actual
Generalmente, este puerto está asociado a la
pantalla
El procedimiento with-output-to-file puede
asociar un fichero al puerto de salida actual
(véase el apartado nº 6)
![Page 61: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/61.jpg)
61
4. Escritura
• display
o Sintaxis
(display objeto [puerto] )
puerto: puerto de salida asociado a un fichero de
escritura; es opcional.
Si se omite, se utiliza el puerto de salida actual
![Page 62: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/62.jpg)
62
4. Escritura
• display
o Significado
Escribe una representación del objeto en el
fichero o dispositivo asociado al puerto de salida
actual
Genera una salida legible por personas
Las cadenas se escriben sin comillas delimitadoras
y no contienen secuencias de escape
Un carácter se escribe como si se hubiera hecho
con write-char.
![Page 63: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/63.jpg)
63
4. Escritura
• display
o Ejemplo (1/2)
(display "Cadena \"sin\" comillas iniciales ni finales")
Cadena "sin" comillas iniciales ni finales
![Page 64: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/64.jpg)
64
4. Escritura
• display
o Ejemplo (2/2)
(define p2 (open-output-file “salida.txt”))
(display "Cadena \"sin\" comillas iniciales ni finales" p2)
Contenido de “salida.txt
Cadena "sin" comillas iniciales ni finales
![Page 65: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/65.jpg)
65
4. Escritura
• write
o Sintaxis
(write objeto [puerto] )
puerto: puerto de salida asociado a un fichero de
escritura; es opcional.
Si se omite, se utiliza el puerto de salida actual
![Page 66: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/66.jpg)
66
4. Escritura
• write
o Significado
Escribe una representación del objeto en el
fichero o dispositivo asociado al puerto de salida
actual
Genera una salida orientada al ordenador
Las cadenas se escriben con comillas
delimitadoras y contienen secuencias de escape
![Page 67: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/67.jpg)
67
4. Escritura
• write
o Ejemplo (1/2)
(write "Cadena \"con\" comillas iniciales y finales")
“Cadena \"con\" comillas iniciales y finales”
![Page 68: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/68.jpg)
68
4. Escritura
• write
o Ejemplo (2/2)
(define p2 (open-output-file “salida.txt”))
(write "Cadena \"con\" comillas iniciales y finales" p2 )
Contenido de “salida.txt
“Cadena \"con\" comillas iniciales y finales”
![Page 69: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/69.jpg)
69
4. Escritura
• write-char
o Sintaxis
(write –char objeto [puerto])
puerto: puerto de salida asociado a un fichero de
escritura; es opcional.
Si se omite, se utiliza el puerto de salida actual
o Significado
Escribe el carácter en el fichero o dispositivo
asociado al puerto de salida actual
![Page 70: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/70.jpg)
70
4. Escritura
• write-char
o Ejemplo (1/2)
(define tecla (read-char))
(write-char tecla)
![Page 71: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/71.jpg)
71
4. Escritura
• write-char
o Ejemplo (2/2)
(define p2 (open-output-file “salida.txt”))
(define tecla (read-char) )
(write-char tecla p2 )
![Page 72: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/72.jpg)
72
4. Escritura
• newline
o Sintaxis
(newline [puerto])
puerto: puerto de salida asociado a un fichero de
escritura; es opcional.
Si se omite, se utiliza el puerto de salida actual
o Significado
Genera un salto de línea en el fichero o
dispositivo asociado al puerto
![Page 73: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/73.jpg)
73
4. Escritura
• newline
o Ejemplo (1/2)
(display “uno”)
(newline)
(display “dos”)
uno
dos
![Page 74: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/74.jpg)
74
4. Escritura
• newline
o Ejemplo (2/2)
(define p2 (open-output-file “salida.txt”))
(display “uno” p2)
(newline)
(display “dos” p2)
![Page 75: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/75.jpg)
75
Programación declarativa Tema 7.- Lectura y escrtitura
Índice
1. Interacción con el sistema
2. Apertura de ficheros y cierre de puertos
3. Lectura
4. Escritura
5. Ejemplos de lectura y escritura
6. Interacción entre procedimientos y ficheros
![Page 76: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/76.jpg)
76
5. Ejemplos de lectura y escritura
• Programa con menú de opciones
• Programa de gestión de donantes de sangre
![Page 77: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/77.jpg)
77
5. Ejemplos de lectura y escritura
• Programa con menú de opciones
• Programa de gestión de donantes de sangre
![Page 78: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/78.jpg)
78
(define (programa)
(define (pedir-opcion) (display “elige una opcion”) (newline) (display “1 raíz cuadrada”) (newline) (display “2 seno”) (newline) (display “0 salir”) (newline) (newline) (read)
) …
Ejemplo: programa con menú de opciones (1/3)
![Page 79: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/79.jpg)
79
… ;; cuerpo de programa (do ( (opcion (pedir-opcion) (pedir-opcion)) ) ;; condición de salida ( (= opcion 0) (display "fin del programa") ) ;; cuerpo del bucle do …
Ejemplo: programa con menú de opciones (2/3)
![Page 80: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/80.jpg)
80
… ;; cuerpo del bucle do (cond ((= opcion 1) (display “escribe un numero positivo ”) (display (sqrt (read))) (newline) ) ((= opcion 2) (display “escribe un numero ”) (display (sin (read))) (newline) ) (else (display “error”) (newline) ) ) (newline) ) ) ;; Llamada al programa (programa)
Ejemplo: programa con menú de opciones (3/3)
![Page 81: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/81.jpg)
81
5. Ejemplos de lectura y escritura
• Programa con menú de opciones
• Programa de gestión de donantes de sangre
![Page 82: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/82.jpg)
82
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FUNCIONES DEL TIPO ABSTRACTO DE DATOS: DONANTE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; FUNCIÓN DE CREACIÓN
;=====================
(define (crear-donante nombre num_donaciones grupo rh)
(list (list 'nombre nombre)
(list 'numero_donaciones num_donaciones)
(list 'grupo grupo)
(list 'rh rh)
)
)
Programa de gestión de donantes de sangre (1/21)
![Page 83: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/83.jpg)
83
;; FUNCIONES DE CONSULTA O ACCESO
;================================
(define (nombre donante)
(cadr (assoc 'nombre donante))
)
(define (numero_donaciones donante)
(cadr (assoc 'numero_donaciones donante))
)
(define (grupo donante)
(cadr (assoc 'grupo donante))
)
(define (rh donante)
(cadr (assoc 'rh donante))
Programa de gestión de donantes de sangre (2/21)
![Page 84: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/84.jpg)
84
;; FUNCIONES DE MODIFICACIÓN
;==========================
(define (cambiar-nombre! donante nuevo)
(set-cdr! (assoc 'nombre donante) (list nuevo))
)
(define (cambiar-donaciones! donante nuevo)
(set-cdr! (assoc 'numero_donaciones donante) (list nuevo))
)
(define (cambiar-grupo! donante nuevo)
(set-cdr! (assoc 'grupo donante) (list nuevo))
)
(define (cambiar-rh! donante nuevo)
(set-cdr! (assoc 'rh donante) (list nuevo))
)
Programa de gestión de donantes de sangre (3/21)
![Page 85: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/85.jpg)
85
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PROGRAMA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (programa)
;; FUNCIONES AUXILIARES
;; FUNCIÓN QUE MUESTRA LAS OPCIONES DEL MENÚ
;; Y PERMITE ELEGIR UNA DE ELLAS
(define (pedir-opcion)
…
Programa de gestión de donantes de sangre (4/21)
![Page 86: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/86.jpg)
86
(define (pedir-opcion)
(display "Elige una opcion" )
(newline)
(display "1 -> Introducir un donante desde el teclado" )
(newline)
(display "2 -> Cargar donantes desde un fichero" )
(newline)
(display "3 -> Grabar los donantes en un fichero" )
(newline)
(display "4 -> Mostrar los donantes por pantalla" )
(newline)
(display "5 -> Mostrar la estructura interna de la lista de donantes" )
(newline)
(display "0 -> Salir" )
(newline)
(newline)
(display " --> ")
;; lee la opción elegida
(read)
)
Programa de gestión de donantes de sangre (5/21)
![Page 87: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/87.jpg)
87
;; LEE UN DATO DEL TECLADO Y LO DEVUELVE
;; Parámetro:
;; mensaje: cadena de texto que indica el dato que se solicita
;;
(define (leer-teclado mensaje)
(display mensaje)
(display " --> ")
(read)
)
Programa de gestión de donantes de sangre (6/21)
![Page 88: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/88.jpg)
88
;; LEE UNA CADENA DEL TECLADO Y LA DEVUELVE
;; Parámetro:
;; mensaje: cadena de texto que indica el dato que se solicita
(define (leer-teclado-cadena mensaje)
(display mensaje)
(display " --> ")
;; Elimina el carácter de salto de línea #\newline, si existe
(if (char=? (peek-char) #\newline)
(read-char)
)
;; Lee los caracteres
;; hasta que encuentra el carácter de salto de línea #\newline
…
Programa de gestión de donantes de sangre (7/21)
![Page 89: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/89.jpg)
89
;; Lee los caracteres
;; hasta que encuentra el carácter de salto de línea #\newline
(do
(
(cadena (make-string 0) (string-append cadena (string caracter)))
(caracter (read-char) (read-char))
)
;; condición de salida
((char=? #\newline caracter)
;; devuelve la cadena leída
cadena
)
;; no hay cuerpo del bucle do
)
)
Programa de gestión de donantes de sangre (8/21)
![Page 90: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/90.jpg)
90
;; Lee los caracteres
;; hasta que encuentra el carácter de salto de línea #\newline
(do
(
(cadena (make-string 0) (string-append cadena (string caracter)))
(caracter (read-char) (read-char))
)
;; condición de salida
((char=? #\newline caracter)
;; devuelve la cadena leída
cadena
)
;; no hay cuerpo del bucle do
)
)
Programa de gestión de donantes de sangre (8/21)
Funciones de manejo de cadenas
![Page 91: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/91.jpg)
91
;; INTRODUCIR LOS DATOS DE UN DONANTE DESDE EL TECLADO
(define (leer-donante-teclado)
(crear-donante
(leer-teclado-cadena "Nombre del donante (escribe con comillas): ")
(leer-teclado "Numero de donaciones: ")
(leer-teclado "Grupo Sanguíneo: ")
(leer-teclado "Factor rh: ")
)
)
Programa de gestión de donantes de sangre (9/21)
![Page 92: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/92.jpg)
92
;; FUNCIÓN QUE PONE LAS COMILLAS INICIALES Y FINALES A UN TEXTO
;; Y LO DEVUELVE COMO CADENA
;; Parámetro:
;; texto: caracteres a los que se les van a poner las comillas
;;
(define (poner-comillas texto)
(string-append (string #\") texto (string #\"))
)
Programa de gestión de donantes de sangre (10/21)
![Page 93: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/93.jpg)
93
; CARGAR LOS DONANTES DESDE UN FICHERO
(define (leer-donantes-fichero)
(define puerto
(open-input-file
(leer-teclado-cadena "nombre del fichero (sin comillas)")
)
)
…
Programa de gestión de donantes de sangre (11/21)
![Page 94: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/94.jpg)
94
…
(do
(
(lista_donantes '() (append lista_donantes
(list (crear-donante (poner-comillas nombre)
(read puerto)
(read puerto)
(read puerto)
)
)
)
)
(nombre (read puerto) (read puerto))
)
;; Condición de salida del bucle
…
Programa de gestión de donantes de sangre (12/21)
![Page 95: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/95.jpg)
95
…
;; Condición de salida del bucle
((eof-object? nombre)
;; Se cierra el puerto asociado al fichero de entrada
(close-input-port puerto)
;; Se devuelve la lista de donantes
lista_donantes
)
;; No hay cuerpo del bucle
)
)
Programa de gestión de donantes de sangre (13/21)
![Page 96: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/96.jpg)
96
;; GRABAR LOS DATOS DE LOS DONANTES EN UN FICHERO
;; Parámetro:
;; lista_donantes: lista que contiene a los donantes que se van a grabar
(define (grabar-donantes-fichero lista_donantes)
(do
(
(puerto (open-output-file
(leer-teclado-cadena "nombre del fichero (sin comillas")))
(lista_auxiliar lista_donantes (cdr lista_auxiliar))
)
;; Condición de salida del bucle
…
Programa de gestión de donantes de sangre (14/21)
![Page 97: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/97.jpg)
97
;; Condicion de salida del bucle
((null? lista_auxiliar)
; Se cierra el puerto asociado al fichero de salida
(close-output-port puerto)
)
;; Cuerpo del bucle
(display (nombre (car lista_auxiliar)) puerto)
(display " " puerto)
(display (numero_donaciones (car lista_auxiliar)) puerto)
(display " " puerto)
(display (grupo (car lista_auxiliar)) puerto)
(display " " puerto)
(display (rh (car lista_auxiliar)) puerto)
(newline puerto)
)
)
Programa de gestión de donantes de sangre (15/21)
![Page 98: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/98.jpg)
98
;; MOSTRAR POR PANTALLA LOS DATOS DE LOS DONANTES
;; Parámetro:
;; lista_donantes: lista que contiene a los donantes que se van a mostrar
(define (mostrar-donantes lista_donantes)
(do
(
(lista_auxiliar lista_donantes (cdr lista_auxiliar))
)
;; Condición de salida del bucle
((null? lista_auxiliar) (newline))
;; Cuerpo del bucle
…
Programa de gestión de donantes de sangre (16/21)
![Page 99: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/99.jpg)
99
;; Cuerpo del bucle
(display "Nombre: ")
(display (nombre (car lista_auxiliar)))
(newline)
(display "Numero de donaciones: ")
(display (numero_donaciones (car lista_auxiliar)))
(newline)
(display "Grupo sanguineo: ")
(display (grupo (car lista_auxiliar)))
(newline)
(display "Factor rh: ")
(display (rh (car lista_auxiliar)))
(newline)
(newline)
)
)
Programa de gestión de donantes de sangre (17/21)
![Page 100: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/100.jpg)
100
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; CUERPO DEL PROGRAMA DE DONANTES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(do
;; Variables
(
;; LISTA EN LA QUE SE VAN A ALMACENAR LOS DONANTES
(donantes '())
(opcion (pedir-opcion) (pedir-opcion))
)
;; condicion de salida
((= opcion 0) (display "fin del programa"))
;; cuerpo del bucle
…
Programa de gestión de donantes de sangre (18/21)
![Page 101: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/101.jpg)
101
;; cuerpo del bucle
(cond
;; INTRODUCIR UN DONANTES DESDE EL TECLADO
((= opcion 1)
(display "Introduccion de datos de un donante")
(newline)
;; Uso obligatorio de set!
(set! donantes (append donantes (list (leer-donante-teclado))))
)
;; CARGAR DONANTES DESDE UN FICHERO
((= opcion 2)
(display "Carga de los datos de los donantes contenidos en un
fichero")
(newline)
;; Uso obligatorio de set!
(set! donantes (append donantes (leer-donantes-fichero)))
(display "Datos cargados")
(newline)
)
Programa de gestión de donantes de sangre (19/21)
![Page 102: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/102.jpg)
102
;; GRABAR LOS DONANTES EN UN FICHERO
((= opcion 3)
(display "Grabacion de los datos de los donantes en un fichero")
(newline)
(grabar-donantes-fichero donantes)
(display "Datos grabados")
(newline)
)
;; MOSTRAR LOS DONANTES POR LA PANTALLA
((= opcion 4)
(mostrar-donantes donantes)
)
;; MOSTRAR LA ESTRUCTURA INTERNA DE LA LISTA DE DONANTES
((= opcion 5)
(display donantes)
(newline)
)
Programa de gestión de donantes de sangre (20/21)
![Page 103: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/103.jpg)
103
;; CONTROL DE ERRORES
(else (display "Opcion incorrecta")
(newline)
)
)
;; Parada antes de continuar
(leer-teclado-cadena "Pulse \"Enter\" para continuar")
(newline)
)
)
;;LLAMADA AL PROGRAMA
(programa)
Programa de gestión de donantes de sangre (21/21)
![Page 104: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/104.jpg)
104
Programación declarativa Tema 7.- Lectura y escrtitura
Índice
1. Interacción con el sistema
2. Apertura de ficheros y cierre de puertos
3. Lectura
4. Escritura
5. Ejemplos de lectura y escritura
6. Interacción entre procedimientos y ficheros
![Page 105: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/105.jpg)
105
5. Interacción entre funciones y ficheros
• Procedimientos que cambian los puertos de entrada o
salida actuales
• Procedimientos que operan directamente con los
ficheros
![Page 106: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/106.jpg)
106
5. Interacción entre funciones y ficheros
• Procedimientos que cambian los puertos de entrada o
salida actuales
o with-input-from-file
Cambia el puerto de entrada actual
current-input-port
o with-output-to-file
Cambia el puerto de salida actual
current-output-port
![Page 107: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/107.jpg)
107
5. Interacción entre funciones y ficheros
• Procedimientos que cambian los puertos de entrada o
salida actuales
o with-input-from-file
Sintaxis
(with-input-from-file f p)
f: nombre de un fichero existente
p: procedimiento sin argumentos
Significado
1. Abre el fichero f y lo asocia al puerto de entrada actual current-input-port
2. Llama al procedimiento p, que realiza sus operaciones de lectura desde el fichero asociado al puerto de entrada actual
![Page 108: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/108.jpg)
108
5. Interacción entre funciones y ficheros
• Procedimientos que cambian los puertos de entrada o
salida actuales
o with-input-from-file
Ejemplo
(define (contar-palabras) (cond ((eof-object? (read)) 0) (else (+ 1 (contar-palabras))) ) ) ;; LLamada (with-input-from-file “datos.txt” contar-palabras)
![Page 109: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/109.jpg)
109
5. Interacción entre funciones y ficheros
• Procedimientos que cambian los puertos de entrada o
salida actuales
o with-input-from-file
Ejemplo
;; LLamada (with-input-from-file “datos.txt” contar-palabras) Observación Todas las sentencias de lectura del contar-
palabras van dirigidas al fichero “datos.txt”
![Page 110: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/110.jpg)
110
5. Interacción entre funciones y ficheros
• Procedimientos que cambian los puertos de entrada o
salida actuales
o with-output-to-file
Sintaxis
(with-output-to-file f p)
f: nombre de un fichero que se va a crear
p: procedimiento sin argumentos
Significado
1. Abre el fichero f y lo asocia al puerto de salida actual current-output-port
2. Llama al procedimiento p, que realiza sus operaciones de escritura en el fichero asociado al puerto de salida actual
![Page 111: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/111.jpg)
111
5. Interacción entre funciones y ficheros
• Procedimientos que cambian los puertos de entrada o
salida actuales
o with-output-to-file
Ejemplo
(with-output-to-file “salida.txt” (lambda () (load “hanoi.rkt”)))
Observación
el procedimiento p es
(lambda () (load “hanoi.rkt”))
“hanoi.rkt” es el fichero que contiene el
procedimiento que resuelve el problema de la
Torres de Hanoi.
![Page 112: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/112.jpg)
112
5. Interacción entre funciones y ficheros
• Procedimientos que cambian los puertos de entrada o
salida actuales
o with-output-to-file
Ejemplo
(with-output-to-file “salida.txt” (lambda () (load “hanoi.rkt”)))
Observación
Todas las sentencias de escritura del
hanoi.rkt van dirigidas al fichero “salida.txt”
![Page 113: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/113.jpg)
113
;; Fichero “hanoi.rkt” ;; Definición de la función “hanoi” (define (hanoi n a b c) (define (cambio a b) (display a) (display “ ”) (display b) (newline) 1 ) (cond ( (= n 1) (cambio a b)) (else ( + (hanoi (- n 1) a c b) (cambio a b) (hanoi (- n1) c b a) ) ) ) ) ;; Llamada a la función “hanoi” (hanoi 3 “a” “b” “c”)
![Page 114: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/114.jpg)
114
5. Interacción entre funciones y ficheros
• Procedimientos que cambian los puertos de entrada o
salida actuales
o with-output-to-file
Ejemplo
(with-output-to-file “salida.txt” (lambda () (load “hanoi.rkt”)))
Contenido del fichero “salida.txt”
A --> B
A --> C
B --> C
A --> B
C --> A
C --> B
A --> B
![Page 115: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/115.jpg)
115
5. Interacción entre funciones y ficheros
• Procedimientos que operan directamente con los
ficheros
o call-with-input-file
Utiliza un fichero de entrada
o call-with-output-file
Utiliza un fichero de salida
![Page 116: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/116.jpg)
116
5. Interacción entre funciones y ficheros
• Procedimientos que operan directamente con los
ficheros
o call-with-input-file
Sintaxis (call-with-input-file f p)
f: nombre de un fichero existente p: procedimiento que recibe como
argumento un puerto asociado a un fichero de entrada.
![Page 117: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/117.jpg)
117
5. Interacción entre funciones y ficheros
• Procedimientos que operan directamente con los
ficheros
o call-with-input-file
Significado
1. Abre el fichero f y lo asocia a un puerto de entrada
2. Llama al procedimiento p, que realiza sus operaciones de lectura desde el fichero asociado al puerto de entrada abierto en el paso anterior
![Page 118: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/118.jpg)
118
• Ejemplo (define (sumar puerto) (let ;; variables de let ( ( n (read puerto)) ) ;; cuerpo de let (cond ((eof-object? n) 0) (else (+ n (sumar puerto) ) ) ) ) ) ;; Llamada (call-with-input-file “datos.txt” sumar)
![Page 119: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/119.jpg)
119
• Equivalencia ;; Llamada (call-with-input-file “numeros.txt” sumar)
o es equivalente a ;; Se abre el fichero de entrada ;; y se asocia al puerto de entrada (define puerto (open-input-file “numeros.txt”)) ;; Se llama a la función o procedimiento (sumar puerto) ;; Se cierra el puerto de entrada (close-input-port puerto)
![Page 120: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/120.jpg)
120
5. Interacción entre funciones y ficheros
• Procedimientos que operan directamente con los
ficheros
o call-with-output-file
Sintaxis (call-with-output-file f p)
f: nombre de un fichero que se va a crear p: procedimiento que recibe como argumento
un puerto asociado a un fichero de salida
![Page 121: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/121.jpg)
121
5. Interacción entre funciones y ficheros
• Procedimientos que operan directamente con los
ficheros
o call-with-output-file
Significado
1. Abre el fichero f y lo asocia a un puerto de salida.
2. Llama al procedimiento p, que realiza sus operaciones de escritura en el fichero asociado al puerto de salida abierto en el paso anterior.
![Page 122: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/122.jpg)
122
• Ejemplo
(define (escribir-carta puerto) (do ( (a (read) (read)) ) ;; condición de salida ((eof-object? a) (newline puerto)) ;; cuerpo de salida (display a puerto) (display “ ” puerto) ) ) ;; Llamada (call-with-output-file “nota.txt” escribir-carta)
![Page 123: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/123.jpg)
123
• Equivalencia ;; Llamada (call-with-output-file “nota.txt” escribir-carta)
o es equivalente a ;; Se abre el fichero de salida ;; y se asocia al puerto de salida (define puerto (open-output-file “nota.txt”)) ;; Se llama a la función o procedimiento (escribir-carta puerto) ;; Se cierra el puerto de salida (close-output-port puerto)
![Page 124: UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA …ma1fegan/2016-2017/pd/temas/Tema-7/PD-Tema-7-castellano.pdfReevaluación y el “corte” Tema 12.- Entrada y salida Segunda parte: Prolog](https://reader036.vdocuments.site/reader036/viewer/2022081621/6125fb5730630d7bf91c20a6/html5/thumbnails/124.jpg)
PROGRAMACIÓN DECLARATIVA INGENIGERÍA NFORMÁTICA
CUARTO CURSO
PRIMER CUATRIMESTRE
Tema 7.- Lectura y escritura
UNIVERSDAD DE CÓRDOBA
ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA
DEPARTAMENTO DE
INFORMÁTICA Y ANÁLISIS NUMÉRICO