我的問題是關於Clojures deftest宏或更一般的關於如何比較由函數創建的列表的問題。但我對Clojure很陌生,無法識別具體的原因。也許別人有想法?如果比較列表,Clojure的默認宏中的聲明錯誤
首先報道的消息:
FAIL在(到符號列表檢驗)(util_test.clj:105)
預期:(=(引號(一個(非B)c))的(to-symbol-list [「a」「(not b)」「c」]))
actual:(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"]))))
三定義:
(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))
功能甚至應該轉換嵌套向量。這是一個例子,其他功能以相同的方式表現。我猜想它可能是由不同類型造成的。例如列表vs lazy-seq和我比較惰性函數而不是數據,但類型似乎是正確的。在REPL我得到:
(type (to-symbol-list ["a" "(not b)" "c"]))
=> clojure.lang.PersistentList
我認爲你正在下降陷阱'(符號「(沒有B)」)' – cfrick
你是對的,多數民衆贊成的問題,謝謝:) – Daniel