Introducción al entorno

Racket es un lenguaje de programación funcional derivado de Scheme. En este vídeo muestro cómo funciona la ventana del IDE DrRacket y muestro cómo interactuar de forma básica con Racket introduciendo al uso de algunas expresiones.

Racket es un lenguaje de programación que proviene de Scheme, a su vez derivado de Lisp, un lenguaje conocido por su uso intensivo de listas y paréntesis. Cuando descargamos Racket desde su página oficial, también obtenemos Dr. Racket, un entorno de desarrollo integrado (IDE) que facilita la escritura y ejecución de código en Racket. Este entorno se adapta a cada sistema operativo, pero siempre nos ofrece una interfaz con dos áreas principales: la ventana de definiciones y la ventana de interacciones.

La ventana de definiciones es donde escribimos el código que queremos que Racket ejecute o cargue, mientras que la ventana de interacciones funciona como una consola donde podemos probar expresiones y ver sus resultados inmediatos. Antes de comenzar a trabajar, es necesario seleccionar el lenguaje dentro de Dr. Racket, ya que este IDE soporta varios lenguajes derivados de Racket y Scheme. Para ello, elegimos el lenguaje Racket en el menú correspondiente y añadimos la línea (lang racket) al inicio de la ventana de definiciones para que el entorno reconozca el lenguaje que vamos a usar.

Podemos ajustar la interfaz para que se adapte mejor a nuestras necesidades, por ejemplo, cambiando la disposición de las ventanas a un diseño horizontal para aprovechar mejor el espacio en pantalla panorámica.

Un aspecto fundamental para entender Racket es su enfoque en la programación funcional, que difiere de la programación imperativa a la que muchos estamos acostumbrados. En la programación imperativa, el programa se basa en cambiar el estado de variables a través de instrucciones secuenciales. Por ejemplo, para calcular el factorial de un número, se suele usar un bucle que modifica un acumulador paso a paso.

En cambio, la programación funcional se centra en definir qué son las cosas mediante expresiones y dejar que el ordenador evalúe esas definiciones. Por ejemplo, el factorial se puede definir recursivamente: el factorial de un número n es n multiplicado por el factorial de n-1, con la base de que el factorial de 0 es 1. Así, el cálculo se realiza mediante la evaluación de estas expresiones sin modificar estados internos.

En Racket, todo se basa en expresiones que se escriben entre paréntesis. La primera palabra dentro del paréntesis indica la operación o función a realizar, seguida de los operandos separados por espacios. Por ejemplo, para sumar 2 y 3 escribimos:

(+ 2 3)

Esta expresión se evalúa y devuelve 5. Podemos combinar expresiones para formar otras más complejas, como sumar el resultado de multiplicar 2 por 3 con el resultado de multiplicar 3 por 4:

(+ (* 2 3) (* 3 4))

Aquí, Racket evalúa primero las multiplicaciones, obteniendo 6 y 12, y luego suma esos resultados para devolver 18.

La ventana de interacciones es ideal para probar este tipo de expresiones y ver sus resultados al instante. Podemos evaluar números simples, valores booleanos como #t (verdadero) y #f (falso), o funciones más elaboradas. Por ejemplo, para calcular la raíz cuadrada de un número usamos la función sqrt:

(sqrt 4)

que devuelve 2, o

(sqrt (+ 2 3))

que primero suma 2 y 3, obteniendo 5, y luego calcula la raíz cuadrada de 5.

Es importante acostumbrarse a escribir primero los paréntesis de apertura y cierre para evitar olvidos, ya que las expresiones pueden volverse complejas y anidadas, con múltiples niveles de paréntesis. Por ejemplo:

(sqrt (+ (sqrt (* 2 3)) (sqrt (* 3 5))))

Esta expresión calcula la raíz cuadrada de la suma de la raíz cuadrada de 6 y la raíz cuadrada de 15, mostrando cómo podemos combinar funciones y expresiones para construir cálculos más elaborados.

En definitiva, Racket nos invita a pensar en términos de expresiones y definiciones, aprovechando la potencia de la programación funcional para construir programas claros y elegantes. La ventana de definiciones será nuestro espacio para crear estas definiciones, mientras que la ventana de interacciones nos permitirá experimentar y verificar resultados de manera inmediata. Más adelante exploraremos cómo definir funciones y trabajar con distintos tipos de datos para aprovechar al máximo este lenguaje tan versátil.

Lista de reproducción
  1. 1
    Introducción al entorno
    16 minutos
  2. 2
    Definiciones, funciones y comentarios
    16 minutos
  3. 3
    Tipos de datos
    23 minutos
  4. 4
    Listas: manipulación, iteración y recursión
    25 minutos
  5. 5
    Todo sobre las condicionales
    17 minutos
  6. 6
    Revisitando las definiciones
    15 minutos
  7. 7
    Funciones lambda (lo básico)
    13 minutos
  8. 8
    Asignaciones con let y let*
    9 minutos