我试图编写一个函数,它会递归地弹出一个地图,以便一次一个地获取一个值。
以下是我到目前为止所做的事情。
(defrecord Stoptest [&args])
(def test (Stoptest. [:c101 :main-office :a1]))
(defn stopPop [x]
(peek (-> x :&args))
(recur(peek(rest x))))
(stopPop test)
我收到错误提及以下内容:
clojure.lang.LazySeq cannot be cast to clojure.lang.IPersistentStack
导致此问题的原因是什么?
干杯
答案 0 :(得分:1)
rest
不是一个向量而是一个懒惰的seq。当您尝试peek
时,会出现错误:
(peek (seq [1 2 3]))
;; gives the same error
问题发生在这里,因为在递归的每一步都有不同的类型对象。在顶部,您有Stoptest
个实例。接下来,您有一个以其他方式运行的延迟序列。
我没有看到任何理由将你的矢量包装到打字记录中。您可以轻松地迭代矢量。