【发布时间】:2014-08-13 23:11:48
【问题描述】:
在这段clojure代码中:
(defn makeStructs ;line 27
"open fName as a file and turns each line into a struct. Returns a Vector of structs"
[fName]
with-open[r (reader (file fName))]
(let [r
res (doall (map makeStruct (line-seq r)))
]
(. r close)
res
)
)
我收到此编译器错误:
Exception in thread "main" java.lang.Exception: Can't take value of a macro: #'clojure.core/with-open (clojureHW.clj:27)
上面注释了第 27 行。
知道问题出在哪里吗?
【问题讨论】:
-
@Svante:我很抱歉,但我所上的课程要求我每周学习一门语言,然后用它编写一个广泛的程序。我以前从未使用过 Lisp,因此在这方面很差。教授没有办公时间,否则我会去那里。
-
每当我尝试新事物时,如果不以看起来像霰弹枪编程的方式重复应用基础知识,我就无法学习基础知识。我经常错误地应用学到的基础知识或应用不正确的推断学习。当我这样做时,有时需要很长时间才能解决问题,但我已经了解了基础知识。然后我通常会尝试一些新的东西。
-
在 C 中,您可以执行
#define X 4并在后续行中执行bar = X;以得到代码bar = 4;,但在 Clojure 中,您会执行类似(defmacro X [] 4)和其他地方 @987654327 的操作@。所以在最简单的情况下,Clojure 需要做一些额外的工作,但在最困难的情况下……好吧,你根本无法用 C 预处理器来做这些事情。