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/