Macros en LISP

Macro es similar a una función en lenguajes populares como C++, java, etc. que toma argumentos y devuelve un formulario LISP para ser evaluado. Es útil cuando se debe ejecutar el mismo código con algunos cambios de variables.
Por ejemplo, en lugar de escribir el mismo código para elevar al cuadrado un número, podemos definir una macro que contenga el código para elevar al cuadrado.

Definición de una macro:

Para definir una macro con nombre en LISP, se utiliza una macro predeterminada: defmacro .
Sintaxis:

(defmacro macroName (parameters)
  expressions
)

Dónde, 

  • macroName: Es el identificador de la macro, donde sea que se use se ejecutarán las expresiones de la macro
  • parámetros: parámetros que se pueden pasar cada vez que se llama a una macro
  • expresiones: Declaraciones ejecutadas dondequiera que se use la macro.

Ejemplo

Lisp

(defmacro sayHello ()
    ; This statement will be executed whenever
      ; we use the macro sayHello
    (write-line "Hello everyone")
)
; Using macro sayHello
(sayHello)
(write-line "GfG")
(sayHello)
(terpri)
  
  
(defmacro greet (name)
    ; This statement will be executed whenever
      ; we use the macro greet
    ; substituting name with the parameter value
    (format t "Welcome ~S ~%" name)
)
; Calling macro square with parameter strings
(greet "GfG audience")
(greet "Awesome people")
(terpri)
  
  
(defmacro sumup (a b)
    ; This line will be executed whenever
      ; we use the macro sum
    ; with two integer parameters
    (format t "~D + ~D : ~D" a b (+ a b))
)
; Calling macro sumup with parameters 7 and 18 
(sumup 7 18)
(terpri)
  
  
(defmacro square (num)
    ; This line will be executed
      ; whenever we use the macro square
    ; with the parameter name
    (format t "Square of ~D is ~D " num (* num num))
)
; Calling macro square with parameter 5
(square 5)
(terpri)

Producción:

Hello everyone
GfG
Hello everyone

Welcome "GfG audience" 
Welcome "Awesome people" 

7 + 18 : 25
Square of 5 is 25 

Publicación traducida automáticamente

Artículo escrito por omkarphansopkar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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