在Clojure中的一厢情愿

时间:2016-05-05 10:45:56

标签: clojure scheme lisp

在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)

1 个答案:

答案 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