Clojure技术问题:如何将cons转换为PersistentList?
将clojure.lang.Cons转换为clojure.lang.PersistentList的方法
嘿,这个问题挺常见的——当你执行(cons 1 (list 2 3))得到clojure.lang.Cons对象后,想要转成Clojure标准的不可变列表类型clojure.lang.PersistentList,有几个简单直接的方法可以试试:
方法1:使用apply list
list函数本身返回的就是PersistentList类型,我们可以用apply把Cons序列里的所有元素作为参数传给list,直接生成目标类型:
(apply list (cons 1 (list 2 3))) ;; 输出结果:(1 2 3),类型为clojure.lang.PersistentList
方法2:调用PersistentList的静态create方法
clojure.lang.PersistentList提供了静态的create方法,接受一个序列作为输入,直接生成对应的PersistentList实例:
(clojure.lang.PersistentList/create (cons 1 (list 2 3))) ;; 输出结果:(1 2 3),类型符合要求
方法3:使用list*(针对已知结构的场景)
如果你的Cons结构是单个元素加一个后续序列(这其实也是cons的返回特点),可以直接用list*来拼接生成PersistentList:
(let [my-cons (cons 1 (list 2 3))] (list* (first my-cons) (rest my-cons))) ;; 输出结果:(1 2 3),类型为clojure.lang.PersistentList
需要注意的是,clojure.lang.Cons是一个轻量的序列实现,而PersistentList是Clojure里更常用的不可变列表类型,支持所有标准的列表操作,上面的方法都能帮你完成无缝转换。
内容的提问来源于stack exchange,提问作者Duong Nhat
相关产品推荐
相关产品推荐

