如何编译(例如失败)clojure文件
我是新来clojure的。我在test.clj中定义了一个函数如何编译(例如失败)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
(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)