繁体   English   中英

递归浏览地图以获取Clojure中的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM