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

Entradas populares de este blog

La entrada y salida en Haskell

OpenGL en Haskell (material opcional)

¡Pi en Haskell!