domingo, 21 de noviembre de 2010

Scheme (Lenguaje Funcional)

Scheme es un lenguaje de programación. Es un lenguaje funcional (si bien impuro, ya que, por ejemplo, sus estructuras de datos no son inmutables) y un dialecto de Lisp. Fue desarrollado por Guy L. Steele y Gerald Jay Sussman en la década de los setenta e introducido en el mundo académico a través de una serie de artículos conocidos como los Lambda Papers de Sussman y Steele.


Ventajas

Scheme, como todos los dialectos de Lisp, tiene una sintaxis muy reducida, comparado con muchos otros lenguajes. No necesita reglas de precedencia, ya que, en esencia, carece de operadores: usa notación prefija para todas las llamadas a función.
Las macros de Scheme permiten adaptarlo a cualquier dominio. Pueden ser usadas, por ejemplo, para añadir soporte a la programación orientada a objetos. Scheme proporciona un sistema de macros higiénico que, aunque no tan potente como el de Common Lisp, es mucho más seguro y, con frecuencia, sencillo de utilizar. La ventaja de un sistema de macros de este tipo (que también se encuentra en otros lenguajes, como Dylan) es que evita automáticamente colisiones entre los nombres usados en la definición de la macro y en el contexto en que ésta se expande. En contrapartida, las macros higiénicas no pueden introducir nuevos símbolos.
Scheme facilita la programación funcional. La programación funcional pura no precisa de variables globales ni sufre de efectos secundarios, y es, por tanto, automáticamente segura en presencia de procesos concurrentes (thread-safe), amén de facilitar considerablemente la verificación de programas, al menos en comparación con el estilo imperativo.

Desventajas
El estándar de Scheme es realmente minimalista y específico en sí. Ello provoca que existan multitud de implementaciones diferentes, cada una de las cuales introduce extensiones y bibliotecas propias que las hace incompatibles entre sí. Los Scheme Requests for Implementation (SRF) tratan de poner remedio a este problema.
Hay quien ve el hecho de que los procedimientos y variables compartan el mismo espacio de nombres como una desventaja, ya que algunas funciones tienen nombres que son de uso común para variables. Por ejemplo,  list es el nombre de un procedimiento, así que es muy habitual ver lst o lyst como nombres de variables, en lugar del obvio "list".
Como hemos dicho, el espacio de nombres es único (en la jerga técnica, Scheme es lo que se conoce como un LISP-1) y, por tanto, también incluye a las macros. Ello hace imposible distinguir el uso de una macro del de una función, así que, si no consultamos la definición de cada uno de los objetos usados, no será en general posible determinar el orden de evaluación en programas con los que no estemos familiarizados.

Comentarios
Para agregar un comentario en Scheme se inicia con un punto y coma (;)  y continúan hasta el final de la línea.
Variables
Las variables son dinámicamente tipadas. Para asociarlas a un valor concreto, podemos usar "define", una expresión "let", o alguna de sus variantes. Las variables asignadas en el primer nivel usando "define" están en ámbito global (es decir, son visibles en el resto de programa).
Ejemplo:
El siguiente programa calcula el factorial de un numero:
(define (factorial x)

   (if (= x 0)
      1
      (* x (factorial (- x 1)))))


Bibliografia

1 comentario: