domingo, 17 de octubre de 2010

LENGUAJES FUNCIONALES - Generalidades Scheme

Lenguajes de Programación - Semana 7 - Tarea 6

Scheme usa un dialecto parecido al de LISP, es decir, su notación es prefija, además de ofrecer la posibilidad de crear nuestras propias funciones para utilizarlas varias veces.

Lo primero que hay que hacer es instalar un interprete de Scheme, si que vamos a irnos directo a nuestra terminal y escribiremos el comando:

sudo apt-get install mit-scheme

Despues podemos inicializarlo escribiendo el comando: mit-scheme, asi se vera la terminal con el interprete ejecutandose:


Vamos a ver algunas generalidades de este lenguaje.

Primero, ya sabemos que toda su sintaxis es prefija, lo que en otros lenguajes es 2 + 5, en notación prefija sería es (+ 2 5), se puede decir que el operando es una función y 2, 5 son las variables que esta recibe.

EJEMPLOS:

(+ 1 2 3) = 6
(- 5.3 2) = 3.3
(- 5 2 1) = 2
(* 2 4 8) = 64
(/ 50 10) = 5


VARIABLES

Para declarar una variable global se utiliza la función

(define var val)

, donde var es el nombre de la variable y val es el valor asignado a dicha variable; por ejemplo:

(define x 5) esto es: x = 5
(define siete 7) esto es: siete = 7

Las variables declaradas bajo este método serán globales, es decir visibles durante todo el programa.

Para una variable local se utiliza la función

(let ((var val)) ... procesos ... ).

Se sigue la mism sintaxis que en la función define, solo que las variables serán locales al alcance de let.

FUNCIONES

Esta es una cualidad distintiva de Scheme, la definición de funciones personalizadas, claro que no es una cualidad única de este lenguaje ya que en cualquier otro tambien es posible hacerlo.
Para ello se utiliza la función

(defun (nombre_fun arg1 arg2) ... procesos ... )

, donde nom_fun es el nombre de nuestra función, y arg1 y arg2 son los argumentos que enviaremos a la función.

EJEMPLOS

Primero abrimos una nueva pestaña en la misma terminal o abrimos otra nueva, como sea, donde abriremos un documento en emacs con el nombre que queramos, pero con la terminación *.scm (extension del interprete Scheme), en mi caso escribiré emacs -nw areas.scm y tecleamos lo siguiente:

(define pi 3.14159)
(define (cuadrado x) (* x x))
(define (circulo x)(* pi x x ))
(define (triangulo x y) (/ (* x y) 2))
(define (rombo x y) (/ (* x y) 2))
(define (trapecio x y z) (/ (* (+ x y) z) 2))

Yo creo que no hace falta explicar mucho que hace este programita, son 5 formulas para calcular el área de las figuras geometricas detalladas en el código.

Guardamos los cambios y ahora vamos a cargar el archivo al interprete de Scheme, en la ventana de la terminal con el interprete Scheme tecelamos la ubicación del archivo que acabamos de escribir, en mi caso:

(load "/home/juancarlos/temp/areas.scm")

Se verá algo asi:


Ahora empezamos a probar cada una de las formulas que definimos, por si hay alguna duda les explico que realiza cada función:

(define pi 3.14159) : Se define el valor de Pi.
(define (cuadrado x) (* x x)) : Ecuación para calcular el área de un cuadrado, la función recibe un solo parámetro, la longitud de los lados y realiza el producto de los mismos.

(define (circulo x)(* pi x x )) : Ecuación para calcular el área de un circulo, la función recibe un solo parámetro, la longitud del radio, eleva su valor al cuadrado y lo multiplica por el valor de Pi.

(define (triangulo x y) (/ (* x y) 2)) : Ecuación para calcular el área de un triangulo, la función recibe dos parámetros, las longitudes de la base y la altura, los multiplica y divide el producto entre 2.

(define (rombo x y) (/ (* x y) 2)) : Ecuación para calcular el área de un rombo, la función recibe dos parámetros: las longitudes de la diagonal mayor y menos, las multiplica y divide su producto entre 2.

(define (trapecio x y z) (/ (* (+ x y) z) 2)) : Ecuación para calcular el área de un trapecio, la función recibe tres parámetros: las longitudes de las bases mayor y menor, y la altura; suma las bases las multiplica por la altura y divide todo el producto entre 2.

Asi se realiza la ejecución del programa:


SALUDOS!! ^_^

3 comentarios:

  1. Tu entrada esta muy padre, cuando me atoraba con como se ponen los operadores checaba tu codigo ;)

    ResponderEliminar
  2. aaa podemos inicarlo poniendo simplemente "scheme" "mit-scheme" es más largo :p

    ResponderEliminar
  3. Bien. Te pongo dos puntos extra por esta entrada.

    ResponderEliminar