lunes, 24 de junio de 2024

Open Dylan

Dylan es un lenguaje funcional de objetos creado originalmente por Apple para Newton.

Dylan es un descendiente directo de Scheme y CLOS (sin la sintaxis Lisp) con un modelo de programación diseñado para admitir la generación eficiente de código de máquina, incluido un control detallado sobre comportamientos dinámicos y estáticos.

Empecemos con el clásico Hola, mundo.

format-out("Hola %s\n", "mundo en Dylan!!")

Para instalarlo eberás descargarlo del siguiente link:

https://github.com/dylan-lang/opendylan/releases/tag/v2023.1.0

(Open) Dylan tiene un REPL similar a lenguajes como Haskell, Clojure, etc.

?45 + 32;
=> 77
?45 - 32;
=> 13
?33 / 33;
=> 1

Si no deseas instalarlo, puede probarlo en el siguiente link:

https://play.opendylan.org/

El sitio provee algunos ejemplos, como el uso de ciclos for, clases, cálculo del Fibonacci, entre otros más.

for loop

for (i from 1,
     c in "abcdef",
     until: c = 'e')
  format-out("%d: %s\n", i, c);
end;

Cálculo del Fibonacci:

define method fib ()
  let a = 0;
  let b = 1;
  method ()
    let r = a + b;
    a := b;
    b := r;
    a
  end
end;

let f = fib();
for (i from 1 to 20) format-out("%= ", f()) end

Clases

// Classes are the primary way to build data structures in Dylan.
// Slots are accessed via normal function calls.

define class <account> (<object>)
  constant slot account-id :: <integer>,
    required-init-keyword: id:;
  constant slot account-name :: <string>,
    required-init-keyword: name:;
  slot account-balance :: <integer> = 0;
end;

let a = make(<account>, id: 1, name: "Zippy");
account-balance(a) := 500;
format-out("%s (#%d) balance = %d",
           account-name(a), account-id(a), account-balance(a));

Macros

define macro inc!
    { inc!(?var:name) } => { inc!(?var, 1) }
    { inc!(?var:name, ?val:expression) } => { ?var := ?var + ?val }
end;

let x = 0;
inc!(x);
inc!(x, 10);
format-out("x = %d\n", x);

Más sobre este lenguaje en próximas entregas.

Enlaces:

https://opendylan.org/
https://play.opendylan.org/

No hay comentarios:

Publicar un comentario