clojure 简单的固定宏
示例
Clojure使用前缀表示法,即:运算符位于其操作数之前。
例如,两个数字的简单和为:
(+ 1 2) ;; => 3
宏允许您在一定程度上操纵Clojure语言。例如,您可以实现一个宏,该宏使您可以使用infix表示法(例如1+2)编写代码:
(defmacro infix [first-operand operator second-operand]
"Converts an infix expression into a prefix expression"
(list operator first-operand second-operand))让我们分解一下上面的代码:
defmacro是用于定义宏的特殊形式。
infix是我们定义的宏的名称。
[first-operandoperatorsecond-operand]是该宏在调用时希望接收的参数。
(listoperatorfirst-operandsecond-operand)是我们宏的主体。它只是list使用提供给infix宏的参数值创建一个,然后将其返回。
defmacro是一种特殊形式,因为它的行为与其他Clojure构造相比有所不同:它的参数不会立即求值(当我们称为宏时)。这就是让我们编写如下内容的原因:
(infix 1 + 2) ;; => 3
的infix宏将扩大1+2参数到(+12),这是可以被评估一个有效的Clojure形式。
如果要查看infix宏生成的内容,可以使用macroexpand运算符:
(macroexpand '(infix 1 + 2)) ;; => (+ 1 2)
macroexpand,顾名思义,它将扩展宏(在这种情况下,它将使用infix宏转换1+2为(+12)),但不允许Clojure的解释器评估宏扩展的结果。
热门推荐
1 足球队祝福语简短
9 修祖屋祝福语简短
10 哥哥考大学祝福语简短
11 满月100天简短祝福语
12 宝子生日祝福语简短
13 简短大气的狗年祝福语
14 生日祝福语大全女生简短
15 群里祝福语简短幽默
16 理科元旦祝福语大全简短
17 最搞笑生日祝福语简短
18 祝老婆生日祝福语简短