Ir al contenido principal

Racket: un lenguaje similar a Lisp (Scheme y Clojure)

Racket es un lenguaje de programación multiparadigma y de propósito general. Inspirado en Lisp y Scheme. Clojure sería un primo algo cercano.

Según la documentación oficial, es usado para crear otros lenguajes. Es utilizado en áreas de la investigación o educación.

En el código de abajo observamos un programa con interfaz gráfica (GUI) que muestra un "Hola, mundo". Se específica el idioma (Spanish) y se muestra el mensaje.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#lang racket/gui

(define my-language 'Spanish)

(define translations
  #hash([Chinese . "你好 世界"]
        [English . "Hello world"]
        [French . "Bonjour le monde"]
        [German . "Hallo Welt"]
        [Greek . "Γειά σου, κόσμε"]
        [Portuguese . "Olá mundo"]
        [Spanish . "Hola mundo"]
        [Thai . "สวัสดีชาวโลก"]
        [Turkish . "Merhaba Dünya"]))

(define my-hello-world
  (hash-ref translations my-language
            "hola mundo"))

(message-box "" my-hello-world)

Como se menciona, Racket es utilizado en:

  • Investigación de nuevos lenguajes de programación y se usa para construir DSLs (domain-specific languages), es decir, lenguajes específicos para resolver problemas concretos. 
  • Su entorno (DrRacket) está diseñado para facilitar el aprendizaje progresivo. 
  • Se emplea en el desarrollo de aplicaciones GUI o scripts.
  • Se puede escribir tanto el backend como el frontend (HTML generativo) en Racket. Entre otras cosas más.

La extensión de un programa en Racket es *.rkt, para no obviar.

Podemos descargar el instalador de Racket en su sitio oficial:

https://download.racket-lang.org/

Si no quieres instalar Racket, puedes usar este sitio:

https://onecompiler.com/racket

Ejemplo 1. El clásico "Hola, mundo".

holamundo.rkt

1
2
#lang racket/base
(display "Hola, mundo en Racket")

Ejecutamos:

1
$ racket holamundo.rkt

En Clojure sería:

1
2
3
4
(comment 
   El clasico Hola, mundo
)
(println "Hola, mundo en Clojure")

Ejemplo 2. Calcular el factorial de un número.

factorial.rkt

1
2
3
4
5
6
7
8
#lang racket

(define (factorial n)
  (if (= n 0)
      1
      (* n (factorial (- n 1)))))

(factorial 5) ; devuelve 120

Ejecutamos:

1
$ racket factorial.rkt

Ejemplo 3. Definir una función que determine si un número es mayor a 100.

mayora100.rkt

1
2
3
4
5
6
7
8
9
#lang racket

(define (mayorA100 n)
  (if (> n 100)
      (display "True")
      (display "False")
     ))

(mayorA100 99) ; 

Ejecutamos:

1
$ racket mayora100.rkt

Ejemplo 4. Un programa que solicite el nombre del usuario.

entrada.rkt

1
2
3
4
5
6
#lang racket

(display "¿Cómo te llamas? ")
(define nombre (read-line))

(displayln (string-append "¡Hola, " nombre "!"))

Ejecutamos:

1
$ racket entrada.rkt

En conclusión, Racket pertenece a la misma familia de lenguajes Lisp, así que comparte muchas características con Clojure, Common Lisp, y especialmente con Scheme. Como son las siguientes:

  1. Sintaxis basada en listas. 
  2. Funciones de primera clase. 
  3. Evaluación dinámica (REPL). 
  4. Recursión. 
  5. Macros. 
  6. Tipado dinámico.

Continuaremos con esta serie de lenguajes de programación y con Racket por supuesto.

Enlaces:

https://racket-lang.org/
https://es.wikipedia.org/wiki/Racket_(lenguaje_de_programaci%C3%B3n)
https://htdp.org/

Comentarios

Entradas populares de este blog

Odin language: el lenguaje de programación orientado a datos para un desarrollo de software sensato

En esta serie sobre lenguajes de programación hablamos de Odin , un lenguaje orientado a datos. Un nuevo lenguaje de programación que nos podrá recordar a lenguajes como C++, Python, Golang o hasta Rust. Instalación (Windows): 1 2 3 4 $ git clone https://github.com/odin-lang/Odin $ cd Odin $ git pull $ build.bat release Debemos asegurarnos de crear la variable de entorno: Nombre: ODIN_HOME Valor: C:\Users\HP\Documents\pruebasOdin\Odin Ejemplo 1. Como primer programa tendremos al clásico "Hola, mundo". holamundo.odin package holamundo import " core:fmt " main : : proc ( ) { fmt . println ( " ¡Hola, mundo desde Odin! " ) } Construimos: $ odin build holamundo . odin - file Ejecutamos: $ holamundo .exe Recordar que si usamos Visual Studio Code podemos instalar el plugin de Odin Language: https://marketplace.visualstudio.com/items?itemName=DanielGavin.ols Ejemplo 2. Programa que muestre las variables que pod...

Programación Windows Batch (CMD) parte 3

Crear ciclos para efectuar operaciones tediosas nos ahorrará tiempo para realizar otras tareas. En está ocasión veremos ciclos con FOR . ¿Cuál es la síntaxis de bucle FOR en Windows Batch? Si está dentro de un archivo *.bat : FOR %%variable IN (seq) DO operaciones Si lo ejecutamos en una terminal: FOR %variable IN (seq) DO operaciones Ejemplo 1 . Recorrer una secuencia de números del 0 al 5: recorrer.bat @ echo off FOR %%i in ( 0 1 2 3 4 5 ) DO echo Hola no. %%i pause Nos imprimirá en pantalla: Hola no. 0 Hola no. 1 Hola no. 2 Hola no. 3 Hola no. 4 Hola no. 5 ¿Puedo usar contadores? Si, se pueden usar. Ejemplo 2 . Uso de contadores: contador.bat @ echo off set numeros = 1 2 3 4 5 6 7 8 9 10 set cont = 0 for %%a in ( %numeros% ) do ( echo Hola no. %%a :: Contador set /a cont+ = 1 ) echo Total: %cont% Este código nos imprimirá, además de los mensajes Hola no. 0 ..., el total de valores conta...

z/OS, ¿Qué es? y ¿Cuáles son sus herramientas?

  En este post veremos las herramientas de z/OS de IBM. z/OS es un sistema operativo de mainframe desarrollado por IBM.  Es parte de la serie IBM z Systems (anteriormente conocida como System z), que se utiliza en los sistemas mainframe de IBM. z/OS es uno de los sistemas operativos más utilizados en el mundo empresarial para ejecutar aplicaciones críticas y procesar grandes volúmenes de datos. Características clave de z/OS: Escalabilidad : z/OS es conocido por su capacidad para manejar grandes cargas de trabajo y escalabilidad vertical, lo que permite agregar recursos de hardware para satisfacer las demandas de procesamiento. Confiabilidad y disponibilidad : z/OS está diseñado para ofrecer alta disponibilidad y confiabilidad. Incorpora características como redundancia y recuperación ante fallas para garantizar la continuidad de las operaciones. Seguridad : Proporciona una amplia gama de funciones de seguridad, como autenticación, autorización y auditoría, para proteger los...