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的解释器评估宏扩展的结果。
热门推荐
10 香港老妈结婚祝福语简短
11 毕业立体贺卡祝福语简短
12 简短新年年会祝福语
13 评论小品祝福语大全简短
14 恭喜师兄结婚祝福语简短
15 员工集体辞职祝福语简短
16 高中新生祝福语 简短
17 装修祝福语男生搞笑简短
18 生日开业蛋糕祝福语简短