lunes, 1 de noviembre de 2010

Scheme

Laboratorio

Scheme
Es un lenguaje de programación funcional y dialecto de Lisp fue creado por Guy L. Steele y Gerald Jay Sussman en los años 70's. La filosofía de Scheme es minimista, es decir, solo contiene lo esencial quitando los elementos sobrantes.
Fue el primer dialecto en Lisp, también fue uno de los primeros lenguajes de programación con continuaciones explicitas, y tiene también gestión automática de memoria igual que Erlang a esto se le llama recolección de basura con esto se quiere decir que es un mecanismo implícito de gestión de memoria(me gustaría hablar de ello en mi siguiente entrada).
La estructura básica del lenguaje son las listas.
Scheme se llamaba originalmente Schemer pero como en el sistema operativo ITS que es el que usaban sus autores, se limitaba la longitud del nombre a 6 caracteres.

Algunas ventajas y desventajas
No necesita reglas de precedencia porque carece de operadores, utiliza la notación prefija para las llamadas a las funciones, Scheme facilita la programación funcional, no tiene variables globales ni efectos secundarios.
Algunas funciones tienen nombres que son comunes de usar para nombrar variables esto provoca errores comunes.

Ahora algunos ejemplos:

Primero que nada instalar Scheme..
sudo apt-get install mit-scheme
Este es un ejemplo de un programa que imprime un triángulo, le agregué algunos comentarios con ";" para explicar las líneas:

(define (T) ;lo que hacemos con esta función es la figura con la que se ;llenara el triángulo
(display "*"))

(define (dibuje cant) ;esta funcion me dibuja los "*" pasando un espacio :entre ellos
(do ((i 0 (+ i 1)))
((= i cant) )
(t)
(display " ")))

(define (triangulo) ;y esta es la que me dibuja el triangulo aquí defino ;que el tamaño sea de 10 *'s
(do ((i 1 (+ i 1)));observa como se hace el ciclo :D
((= i 10) )
(dibuje i);llamada a la funcion
(newline)));pasa renglon

Este ejemplo lo obtuve de una pagina de Internet aunque tenia algunos errores o no estaba completo ya que donde puse display " ", tenia una función que llamaron espacio, pero no estaba declarada, me parece mucho mas sencillo solo poner " " directo y no declarar otra función llamada espacio, bien esta es la página.

El programa se guarda con la extensión .scm y se compila con el comando (load "programa"), esta es la ejecución del programa:


Y uno que realicé con varias funciones:
(display "Hola elige alguna función")
(display "Raiz, suma, cuadrado, potencia o resta")
(define(raiz X)(sqrt X))
(define(cuadrado X)(* X X))
(define(suma X Y)(+ X Y))
(define(potencia X Y)(expt X Y))
(define(resta X Y)(- X Y))
Ejecución:


Estos son algunos sitios que consulté antes de hacerlo:

3 comentarios:

  1. Hola Sandra, me quedó una duda al ver el programa del triángulo, estas lineas
    (do ((i 0 (+ i 1)))
    ((= i cant) )
    vendrian siendo como un for en scheme?

    por lo demás muy bien explicado como siempre, saludos:)

    ResponderEliminar
  2. muchas gracias, necesitaba un ejemplo del ciclo :)

    ResponderEliminar