Publicado el 12 de Abril del 2018
2.759 visualizaciones desde el 12 de Abril del 2018
2,2 MB
201 paginas
Creado hace 14a (27/07/2010)
Departamento de Electrónica e Informática,
Universidad Centroamericana
José Simeón Cañas
Programando con Racket 5
por Eduardo NAVAS
versión 1.0
2010.07.21
Este libro fue desarrollado únicamente con software libre. Entre las herramientas usadas,
se encuentran: LATEX, LYX, GNU/Linux, GNOME, KDE, KmPlot, GIMP, Python, etc.
CC-BY-NC-SA
Este es un libro libre con la licencia
Creative Commons Attribution-Noncommercial-Share Alike 3.0.
Los detalles pueden ser consultados en:
http://creativecommons.org/licenses/by-nc-sa/3.0/deed.es
La versión digital y el material adicional puede ser descargado de:
www.aliamondano-eo.wikidot.com/racket-5
http://dei.uca.edu.sv/publicaciones/
ISBN: 978-99923-73-61-3
Editado y preparado desde el
Departamento de Electrónica e Infomática de la
Universidad Centroamericana José Simeón Cañas,
El Salvador, Centroamérica.
Dedico esta obra al egoísmo
Prólogo
Este libro evolucionó a partir del material preparado para las clases de la materia Progra-
mación Funcional, impartida para la Carrera de Licenciatura en Ciencias de la Computación
de la Universidad Centroamericana José Simeón Cañas.
Después de un año de trabajo, este libro incluye un recorrido por las características básicas
del lenguaje Racket, en su versión 5.
Racket 5 es la nueva versión de PLT Scheme, un sistema de programación de larga tradición
en el aprendizaje de la programación de computadoras, a través del paradigma funcional,
basándose en el lenguaje Scheme.
Realmente no existe, formalmente hablando, un lenguaje llamado Scheme, sino que se le
llama así a una familia de lenguajes de programación funcionales (véase el capítulo 1).
En este libro, se discute especícamente el dialecto conocido como Racket (anteriormente
PLT Scheme), uno de los más difundidos. Si se quiere un estudio más purista sobre Scheme,
revise el estándar R5RS que también es soportado por el intérprete de Racket.
Los temas abordados en la Parte I incluyen una introducción a la programación funcional,
una sencilla guía de instalación de Racket y una introducción a la interacción con Racket y
DrRacket.
En la Parte II se introduce el lenguaje Racket en sí, a través de sus elementos básicos y los
bloques lambda, característicos de la programación funcional.
La Parte III describe los demás elementos del lenguaje y contiene múltiples ejercicios para
que el lector practique sus nuevos conocimientos.
Finalmente, la Parte IV muestra las capacidades de Racket para implementar programas
con interfaces graácas de usuario.
Y por último, la Parte V incluye un anexo describiendo las diferencias entre la versión 5 de
Racket y la serie 4.x de PLT Scheme.
7
8
Índice general
I.
Introducción a la Programación Funcional con Racket
1. Programación Funcional
1.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Características
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. Lenguajes de Programación Funcionales . . . . . . . . . . . . . . . . . . . .
1.4. Ejemplos de código de lenguajes funcionales . . . . . . . . . . . . . . . . . .
2.
Instalación de Racket
2.1.
2.2.
. . . . . . . . . . . . . . . . . . . . . . .
Instalación con el instalador ocial
Instalación desde repositorios . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1. Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.2. Fedora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. Expresiones Racket - Notación Preja
3.1. Notación para la sintaxis de Racket . . . . . . . . . . . . . . . . . . . . . . .
3.2. Notación preja de Racket . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.
Interacción con Racket
4.1. Ejecución interactiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
4.2. Ejecución no interactiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
4.1.1. Deniciones e interacciones con DrRacket
4.1.2. Ejecución interactiva con Racket
4.2.1. Parámetros de la línea de comandos
5. Compilación de programas Racket
5.1. Lo básico sobre compilación . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2. Compilación con múltiples módulos . . . . . . . . . . . . . . . . . . . . . . .
II.
Introducción al lenguaje Racket
6. Elementos básicos
6.1. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
19
19
20
20
21
23
23
24
24
25
27
27
27
29
29
30
30
31
31
33
33
33
35
37
37
9
Índice general
6.2.1.
Identicadores
6.2. Deniciones Globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3. Llamadas a funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4. Bloques condicionales
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4.1. if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4.2. and y or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4.3. cond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4.4. case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5. Bloques de código secuencial . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.6. Más sobre llamadas a funciones . . . . . . . . . . . . . . . . . . . . . . . . .
7. Funciones anónimas - Bloques lambda
7.1. Bloques lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2. Funciones/Expresiones que producen funciones
. . . . . . . . . . . . . . . .
8. Asignación local
8.1. define . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2. let . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3. let* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
III. Elementos del lenguaje
9. Listas e Iteración
9.1. Listas
9.2.
9.3.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.1. Lista vacía o nula . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.2. Funciones básicas sobre listas . . . . . . . . . . . . . . . . . . . . . .
Iteración automática . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2.1. map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2.2. andmap y ormap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2.3. filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2.4. for-each . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2.5. Versiones generales de las funciones de iteración . . . . . . . . . . . .
Iteración manual
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3.1. Aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4.1. Convención de impresión . . . . . . . . . . . . . . . . . . . . . . . . .
9.4.2. Notación inja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4. Pares y listas
10.Recursión
10.1. Recursión por Posposición de trabajo . . . . . . . . . . . . . . . . . . . . . .
10.2. Recursión de Cola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
37
38
39
39
39
40
41
42
43
43
45
45
46
49
49
50
50
51
53
53
54
54
56
56
56
57
58
59
59
60
61
62
62
67
67
67
Índice general
11.Tipos de dato integrados del lenguaje
11.1. Booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2. Números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2.1. Clasicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Clasicación por Exactitud . . . . . . . . . . . . . . . . . . . . . . .
Clasicación por Conjuntos . . . . . . . . . . . . . . . . . . . . . . .
11.2.2. Otras bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2.3. Comparaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2.4. Constantes especiales . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.3. Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.4. Cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.4.1. Cadenas mutables
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.4.2. Comparación entre cadenas . . . . . . . . . . . . . . . . . . . . . . .
11.4.3. Otras funciones de cadena . . . . . . . . . . . . . . . . . . . . . . . .
11.5. Bytes y Cadenas de Bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.6. Símbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.7. Palabras clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.8. Pares y listas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.9. Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.10.Tablas Hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.11.Void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.Expresiones y Deniciones Avanzadas
12.1. La función apply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.2. Bloques lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.2.1. Funciones con cualquier número de parámetros . . . . . . . . . . . .
12.2.2. Funciones con un mínimo número de parámetros
. . . . . . . . . . .
12.2.3. Funciones con parámetros opcionales . . . . . . . . . . . . . . . . . .
12.2.4. Funciones con parámetros con nombre . . . . . . . . . . . . . . . . .
12.2.5. Funciones con aridad múltiple . . . . . . . . . . . . . . . . . . . . . .
12.2.6. Consultando la aridad de las funciones . . . . . . . . . . . . . . . . .
Comentarios de: Programando con Racket 5 (0)
No hay comentarios