📜  LISP 中的宏

📅  最后修改于: 2022-05-13 01:54:49.420000             🧑  作者: Mango

LISP 中的宏

宏类似于 C++、 Java等流行语言中的函数,它接受参数并返回要评估的 LISP 形式。当必须通过一些变量更改执行相同的代码时,它很有用。
例如,我们可以定义一个宏来保存用于平方的代码,而不是编写相同的代码来求平方。

定义宏:

要在 LISP 中定义命名宏,使用默认宏 - defmacro
句法:

(defmacro macroName (parameters)
  expressions
)

在哪里,

  • macroName:是宏的标识符,无论在哪里使用,都会执行宏表达式
  • 参数:调用宏时可以传递的参数
  • 表达式:在使用宏的任何地方执行的语句。

例子

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)


输出:

Hello everyone
GfG
Hello everyone

Welcome "GfG audience" 
Welcome "Awesome people" 

7 + 18 : 25
Square of 5 is 25