在Scheme中我习惯做这样的事情
(define (f x) (g x))
(define (g x) (+ x 42))
(g 0)
也就是说,我习惯于根据其他瞬间无界函数来定义函数。 为什么Clojure不可能这样做?例如,在Clojure REPL上,以下内容无效
(defn f [x] (g x))
(defn g [x] (+ x 42))
(g 0)
答案 0 :(得分:11)
事情是每个行都在repl中编译,因此在编译g
时没有f
函数。您应该在(declare g)
之前添加(defn f...
,以便编译器知道此功能:
user> (declare g)
#'user/g
user> (defn f [x] (g x))
#'user/f
user> (defn g [x] (+ x 42))
#'user/g
user> (g 0)
42