next up previous contents
Next: Programación orientada a objetos Up: LE-LISP Previous: B.1.2 Otros tipos de

B.1.3 Tipos de funciones

La función básica que utiliza el intérprete LE-LISP para evaluar expresiones es eval, de modo que (eval <expresión>) evalúa <expresión>. Sin embargo, el modo en que se realiza esa evaluación reviste diferentes características según el tipo de objeto que se vaya a evaluar:

En relación al tipo de evaluación aplicada, se pueden distinguir cuatro tipos de funciones:

A continuación vamos a analizar más detalladamente cada uno de los distintos tipos de funciones.

Funciones expr

Esta clase de funciones están escritas en el propio LE-LISP. Su característica fundamental es que los argumentos son siempre evaluados. Se definen generalmente utilizando la función defun. El proceso de evaluación se realiza de la siguiente manera:

  1. Los valores de los nombres de los parámetros se guardan en la pila mientras se les asocian los nombres de los argumentos. Esto quiere decir que en este tipo de funciones las llamadas se realizan por valor.
  2. Se evalúan las expresiones en el cuerpo de la función. El resultado devuelto es el valor resultante de la evaluación de la última de dichas expresiones.
  3. Se deshacen las asignaciones realizadas en el primer paso. Se restauran los valores anteriores de los nombres de los parámetros, que habían sido guardados en la pila.

Como caso particular, en aquellas funciones expr cuya lista de parámetros contine únicamente &nobind, no se asigna ninguna variable. La función arg sin argumentos se utiliza en el cuerpo de dichas funciones para conocer el número de argumentos pasados en cada llamada, mientras que (arg n) devuelve el argumento de la posición n, considerando que el primero ocupa la posición 0. Esta clase particular de funciones se utiliza para crear funciones con un número variable de argumentos.

La compilación de funciones de tipo expr da lugar a funciones LLM3 que reciben el nombre de subr, de las cuales existen entre 400 y 500 en el sistema.

Funciones fepxr

Son funciones escritas en LE-LISP y evaluadas por las funciones de evaluación estándar eval, apply o funcall. Se definen por medio de la función df. Su característica fundamental es que no evalúan sus argumentos, sino que es el programador el encargado de evaluarlos mediante la utilización de eval en el cuerpo de la función.

La compilación de este tipo de funciones da lugar a las funciones LLM3 denominadas fsubr. Este tipo de funciones se usan principalmente como funciones de control o para la manipulación de nombres y reciben generalmente el nombre de formas especiales. Su número es reducido en LE-LISP.

Funciones macro

Para definirlas se utiliza la función dm. Tiene un número variable de argumentos, que no se evalúan. Para evaluar una forma que tiene a una macro como función, el evaluador primero evalúa la función asociada con esa macro utilizando la forma entera (obviamente, no evaluada) como argumento. Entonces re-evalúa el valor devuelto por esta primera evaluación. Por consiguiente, la evaluación de una macro es un proceso de dos pasos.

La compilación de este tipo de funciones da como resultado funciones msubr en LLM3.

Funciones dmacro

Se definen por medio de la función defmacro. La evaluación de este tipo de funciones difiere de la realizada en las de tipo macro en dos aspectos:

Son menos generales que las funciones macro, pero se usan con más frecuencia que aquellas. Su compilación da lugar a funciones de tipo dmsubr en LLM3.


next up previous contents
Next: Programación orientada a objetos Up: LE-LISP Previous: B.1.2 Otros tipos de

Miguel A. Alonso Pardo
Thu Nov 20 16:47:01 CET 1997