LISP - Funciones

Una función es un grupo de declaraciones que juntas realizan una tarea.

Puede dividir su código en funciones separadas. La forma en que divide su código entre las diferentes funciones depende de usted, pero lógicamente la división suele ser para que cada función realice una tarea específica.

Definición de funciones en LISP

La macro nombrada defunse utiliza para definir funciones. losdefun macro necesita tres argumentos -

  • Nombre de la función
  • Parámetros de la función
  • Cuerpo de la función

La sintaxis de defun es -

(defun name (parameter-list) "Optional documentation string." body)

Ilustremos el concepto con ejemplos sencillos.

Ejemplo 1

Escribamos una función llamada averagenum que imprima el promedio de cuatro números. Enviaremos estos números como parámetros.

Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

(defun averagenum (n1 n2 n3 n4)
   (/ ( + n1 n2 n3 n4) 4)
)
(write(averagenum 10 20 30 40))

Cuando ejecuta el código, devuelve el siguiente resultado:

25

Ejemplo 2

Definamos y llamemos una función que calcularía el área de un círculo cuando el radio del círculo se da como argumento.

Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

(defun area-circle(rad)
   "Calculates area of a circle with given radius"
   (terpri)
   (format t "Radius: ~5f" rad)
   (format t "~%Area: ~10f" (* 3.141592 rad rad))
)
(area-circle 10)

Cuando ejecuta el código, devuelve el siguiente resultado:

Radius:  10.0
Area:   314.1592

Tenga en cuenta que -

  • Puede proporcionar una lista vacía como parámetros, lo que significa que la función no acepta argumentos, la lista está vacía, escrita como ().

  • LISP también permite argumentos opcionales, múltiples y de palabras clave.

  • La cadena de documentación describe el propósito de la función. Está asociado con el nombre de la función y se puede obtener utilizando eldocumentation función.

  • El cuerpo de la función puede constar de cualquier número de expresiones Lisp.

  • El valor de la última expresión del cuerpo se devuelve como el valor de la función.

  • También puede devolver un valor de la función usando el return-from operador especial.

Analicemos brevemente los conceptos anteriores. Haga clic en los siguientes enlaces para encontrar detalles: