[英]Recursively peek a map to get its values in Clojure
我正在尝试编写一个函数,该函数将递归弹出地图以一次获取一个值。
以下是到目前为止我得到的..
(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
是什么导致此问题?
干杯
rest
不返回向量,而是一个懒惰的序列。 当您尝试peek
时出现错误:
(peek (seq [1 2 3])) ;; gives the same error
因为您在递归的每个步骤上都有不同的类型对象,所以这里出现问题。 在顶部,您具有Stoptest
实例。 接下来,您有一个以其他方式运行的惰性序列。
我在这里看不到任何将向量包装到类型记录中的原因。 您总是可以轻松地在向量上进行迭代。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.