我从 Clojure 开始,这也是我的第一个 lisp。显然有很多东西需要吸收,为了减轻认知负担,我尝试找到我可以安全地忽略的部分(目前)。
人们能否安全地以相同的方式处理带有宏的表单和带有内置函数的表单,或者是否会出现以后出现的陷阱?
换句话说,我是否会遇到需要知道的情况(defn f1 [])
扩展到
(def f1 (.withMeta (clojure.core/fn f1 ([])) (.meta (var f1))))
一般来说,宏的组成非常不同。宏不是“一等公民”:你不能将它们传递给map
等等,你不能将它们存储在变量中,也不能apply
将它们添加到参数列表中。最初你不需要担心这些,因为它们会明显地不起作用:一个微妙的、难以察觉的错误会更麻烦。如果你尝试跑步
(map if [true false true false] [1 2 3 4] [-1 -2 -3 -4])
事实上,如果是不是一个函数会变得非常明显。请记住,宏不是函数,你应该没问题:)
PS:宏是(fn (fn (fn :-D) :^P) :O)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)