PROGRAMAS EN LISP

ESCRITURA DE PROGRAMAS 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  a  continuación  es  un programa en LISP que calcula y visualiza la media de una lista de números de entrada. (Aunque este problema concreto es la antítesis de los problemas a los que se aplica normalmente el LISP, lo usaremos para ilustrar la sintaxis y desarrollar una base para la enseñanza del lenguaje.) Por ejemplo, si la entrada es la lista:

 

(85.5 87.5 89.5 91.5)

 

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

 

(defun sum (x) ;calcula la suma de una lista x

(cond ((null x) O)

((atom x) x)

(t (+ (car x) (sum (cdr x)]

(defun cont (x) ; cuenta el número de valores de x

(cond ((null x) O)

((atom x) 1)

(t (addl (cont (cdr x)]

(defun media () ; el programa principal comienza aquí

(print 'introducir la lista a promediar')

(setq x (read)) (setq n (count x))

(setq med (/ (sum x) n))

(princ "la media es = ‘ ‘) (print med)]

 

El programa está compuesto de tres funciones del LISP, cada una indicada por la cabecera «defun» (abreviación de «define function”). La primera función «sum» calcula la suma aritmética de los elementos de la lista x. La segunda, «cont», calcula el número de valores de la lista. 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 variables acotadas, las cuales son locales a una función.

Los  bucles  en  LISP  se  dan  normalmente  mediante  la recursividad en vez de mediante la iteración. Entonces, par 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 el resultado 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 (l 2 3 ), entonces su suma es 1 más la suma de la lista (2 3), y así sucesivamente.

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, ], puede usarse al final de una definición de función para cerrar efectivamente todos los paréntesis izquierdos, (, que le precedan. Esto evita la necesidad de contar y explícitamente equilibrar los paréntesis derechos en muchos casos. Usaremos más adelante este criterio.

Finalmente,   observe   que   no   hay   una   diferencia fundamental entre la estructura de los programas en LISP y sus datos.

Esta característica conduce a una fuerte facilidad inherente para que los programas manipulen a otros programas, como veremos. También esto permite una uniformidad básica de las expresiones no encontradas en otros lenguajes. Por tanto, este breve ejemplo contiene los condimentos básicos de la programación en LISP.

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *