在Scheme中,我可以做这样的事情:
(define (adder)
(define (one) 1)
(define (two) 2)
(+ (one) (two)))
调用adder
将得到3
,而调用one
将导致错误,因为one
仅在adder
的作用域内可见。
在Clojure中,如果我做类似的事情
(defn adder []
(defn one [] 1)
(defn two [] 2)
(+ (one) (two)))
one
和two
会污染我的命名空间,因为defn
在内部使用def
创建当前命名空间中的绑定。
是否有一个函数/宏可以在本地作用域中创建命名函数?
我提出这个问题的原因是我习惯了Scheme的工作方式。以这种方式为我的本地函数命名经常使我的代码更易读。
defn-
在这里不适用。 - Adam Arold