Lisp

Páginas: 8 (1833 palabras) Publicado: 24 de abril de 2012
GUIA 2: ESCRITURA DE PROGRAMAS

1. Programa en Lisp

Un programa en LISP se ejecuta normalmente interpretativa e interactivamente. En su forma más sencilla, un programa o una función se representa como una expresión completamente puesta entre paréntesis con todos los operadores en la forma prefija. Todas las variables tienen valores átomos o listas.

El programa que se muestra acontinuación es un programa en LISP que calcula la suma de una lista

Ejemplo 1:

(defun sum(x) ;calcula la suma de una lista x
(cond((null x) 0)
((atom x) x)
(t (+ (car x) (sum (cdr x)))) ))

(defun sumar()
(print "introducir la lista")
(setq x (read))
(setq n (sum x))
(print n)
)

Probando el código:

> (sumar)

"introducir la lista" (85.5 87.5 89.591.5)
354.0

Los bucles en LISP se dan normalmente mediante la recursividad en vez de mediante la iteración. Entonces, por ejemplo, el cálculo de sum se hace mediante la siguiente definición recursiva:

* Si la lista está vacía (es decir, "nula"), la suma es 0.
* Si la lista tiene una entrada, la suma es esa entrada.
* Si la lista tiene más de una entrada, la suma es elresultado de añadir la primera entrada (es decir, el "car") y la suma de la lista compuesta de las restantes entradas (es decir, la "cdr").

Por tanto, si la lista es (1 2 3), entonces su suma es 1 más la suma de la lista (2 3), y así sucesivamente.

El programa que se muestra a continuación cuenta el número de valores de la lista x, y de igual manera que la anterior usa la recursividad para llegaral resultado:

Ejemplo 2

(defun cont(x) ; cuenta el número de valores de x
(cond ((null x) 0)
((atom x) 1)
(t (+ (cont (first x)) (cont (rest x)) )) ))

(defun contar()
(print "introducir la lista")
(setq x (read))
(setq n (cont x))
(print n)
)

Probando el código:

> (contar)

"introducir la lista" (85.5 87.5 89.5 91.5)
4

Ambos programas pueden ser usadospor un tercero, el cual hallara la media de los valores de toda la lista:

Ejemplo 3:

(defun sum(x) ;calcula la suma de una lista x
(cond((null x) 0)
((atom x) x)
(t (+ (car x) (sum (cdr x)))) ))

(defun cont(x) ; cuenta el número de valores de x
(cond ((null x) 0)
((atom x) 1)
(t (+ (cont (first x)) (cont (rest x)) )) ))

(defun media() ; el programa principalcomienza aquí
(print "introducir la lista")
(setq x (read))
(setq n (cont x))
(print n)
(setq med (/ (sum x) n))
(print "la media es =")
(print med)
)

Probando el código:

> (media)

"introducir la lista" (85.5 87.5 89.5 91.5)
4
"la media es ="
88.5

Entonces el resultado presentado será el valor 88.5. La variable x se utiliza para almacenar lalista de entrada y la variable n se utiliza para determinar cuántos valores hay. La variable med contiene al final la media calculada.

El programa como vemos está compuesto de tres funciones del LISP, cada una indicada por la cabecera defun (abreviación de "define function”). La primera función sum que calcula la suma aritmética de los elementos de la lista x, la segunda, cont, calcula el númerode valores de la lista y la tercera función, media, es el programa principal y controla la entrada (usando read), el cálculo de la media med y la salida (usando print).

Los comentarios en LISP comienzan con el delimitador especial punto y coma (;) y continúan hasta el final de la línea. Las variables están normalmente sin declarar y tienen un ámbito global. También pueden especificarse variablesacotadas, las cuales son locales a una función.

La estructura sintáctica del LISP es muy sencilla. El programa es una expresión completamente puesta entre paréntesis, en la cual todas las funciones aparecen como operadores prefijos. En algunas implementaciones del LISP hay dos clases de paréntesis, () y []. Los corchetes se utilizan para especificar cierres múltiples. El corchete derecho,],...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • lisp
  • Lisp
  • lisp
  • lisp dicertacion
  • programación Lisp
  • Examen LISP
  • ejercicios de lisp
  • Programación con lisp

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS