如何编译(例如失败)clojure文件

如何编译(例如失败)clojure文件,clojure,Clojure,我是新来clojure的。我在test.clj中定义了一个函数 (defn foldl [f val coll] (if (empty? coll) val (foldl f (f val (first coll)) (rest coll)))) 我试着加载这个文件 user=> load-file "test.clj" #object[clojure.lang.RT$3 0x16bb1d20 "clojure.lang.RT$3@16bb1d2

我是新来clojure的。我在test.clj中定义了一个函数

(defn foldl [f val coll]
  (if (empty? coll) val
    (foldl f (f val (first coll)) (rest coll))))
我试着加载这个文件

user=> load-file "test.clj"
#object[clojure.lang.RT$3 0x16bb1d20 "clojure.lang.RT$3@16bb1d20"]
"test.clj"
它不会抱怨,但当我尝试使用它时

foldl + 0 (1 2 3)
我明白了


当我加载函数而不是执行函数时,如何强制它编译并告诉我函数有什么问题?另外,错误的含义是什么?

在调用诸如
load file
之类的函数时,需要使用括号

(load-file "test.clj")
没有括号,这只是计算符号
load file
,它解析为函数和字符串“test.clj”。这两者都显示在REPL中

调用
foldl
时也类似:

(foldl + 0 '(1 2 3))
相比之下

foldl + 0 (1 2 3)

是由4种形式组成的列表-符号
foldl
+
,长0和列表
(1 2 3)
。由于在上一步中加载文件失败,因此找不到
foldl
,因此出现错误
+
解析为REPL中显示的
clojure.core/+
函数<代码>0计算为自身,并显示在REPL中,而列表
(1 2 3)
是通过尝试调用
1
作为带有参数
2
3
的函数来计算的。由于
1
未实现
IFn
您将收到错误“java.lang.Long无法转换为clojure.lang.IFn”。

clojure文档资源列表:
foldl + 0 (1 2 3)