我的问题是关于 Clojures deftest 宏或更一般地关于如何比较由函数创建的列表。但我是 Clojure 的新手,无法识别具体原因。也许其他人有想法?
首先报告的消息:
(to-symbol-list-test) (util_test.clj:105)
预期失败:(= (quote (a (not b) c)) (to-symbol-list ["a" "(not b)" " c"]))
实际:(not (= (a (not b) c) (a (not b) c)))
但是很明显,引用的 (= (a (not b) c) (a (not b) c)) 应该是正确的。
二、具体测试代码:
(deftest to-symbol-list-test
(is (= '(a (not b) c) (to-symbol-list ["a" "(not b)" "c"]))))
三、to-symbol-list的定义:
(defn to-symbol-list [term]
"Converts a vector based term into a list based term
by converting its elements into symbols recursivly"
(postwalk
#(if (string? %)
(symbol %)
(reverse (into '() %)))
term))
该函数甚至应该转换嵌套向量。这是一个示例,其他函数的行为方式相同。我猜这可能是由不同类型引起的。例如列表与惰性序列,我比较惰性函数而不是数据,但类型似乎是正确的。在 REPL 我得到:
(type (to-symbol-list ["a" "(not b)" "c"]))
=> clojure.lang.PersistentList