Mat*_*teo 4 lisp scheme clojure
在Scheme I中我习惯做这样的事情
(define (f x) (g x))
(define (g x) (+ x 42))
(g 0)
Run Code Online (Sandbox Code Playgroud)
也就是说,我习惯用其他瞬间无界函数来定义函数.为什么在Clojure中不可能这样做?例如,在Clojure REPL上,以下内容无效
(defn f [x] (g x))
(defn g [x] (+ x 42))
(g 0)
Run Code Online (Sandbox Code Playgroud)
lee*_*ski 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
Run Code Online (Sandbox Code Playgroud)