Scheme y Haskell, ligera comparativa
Scheme es un lenguaje de programación interesante, pero hay que reconocer
que su sintaxis, llena de paréntesis, no parece actualizada. De todas formas,
un rápido vistazo a un par de programas clásicos en este programa dará
idea de cómo programar aquí, en Scheme.
(define (fact n) (if (eq? n 0) 1
(* n (fact (- n 1)))))
(define (fib n)
(if (or (eq? n 0) (eq? n 1)) 1
(+ (fib (- n 1)) (fib (- n 2)))))
Como vemos, los paréntesis abundan. Podemos cargar este programa
en chez scheme, por ejemplo, y obtener:
Chez Scheme Version 9.5
Copyright 1984-2017 Cisco Systems, Inc.
> (load 'ejemplo.scm)
Exception in load: ejemplo.scm is not a string
Type (debug) to enter the debugger.
> (load "ejemplo.scm")
> (fact 10)
3628800
> (fib 10)
89
>
Así que los programas de fact y fib en Scheme tienen muchos paréntesis,
y también tienen muchos operadores prefijos. Lo interesante es que, habituándose
un poco, son fácilmente traducibles a Haskell, pero con la salvedad de que los
mecanismos de ejecución son diferentes: En Haskell la evaluación es de afuera
hacia adentro (evaluación perezosa) y en Scheme de adentro hacia
afuera (evaluación voraz o rápida). Platicaremos más de estos detalles posteriormente.
Comentarios
Publicar un comentario