我发现在 Clojure 中,特殊形式不能作为参数传递或保存在变量中:
user=> (defn my-func
[op]
(op 1 2 3))
#'user/my-func
user=> (my-func +)
6
user=> (my-func if)
java.lang.Exception: Unable to resolve symbol: if in this context (NO_SOURCE_FILE:5)
user=> (def my-if if)
java.lang.Exception: Unable to resolve symbol: if in this context (NO_SOURCE_FILE:9)
在球拍/方案中:
> (define (my-func op)
(op 1 2 3))
> (my-func +)
6
> (my-func if)
if: bad syntax in: if
> (define my-if if)
*if: bad syntax in: if
这很酷,我很好,我知道我可以编写一个函数来包装一个特殊的表单,然后传递那个函数。
但我想知道为什么 Lisps 有这个限制,以及允许这样做会产生什么负面影响。他们是否有任何允许这样做的主要方言?