核心集合数据结构(列表、向量、映射和集)均有创建它们的可变参数函数:list
、vector
、hash-map
、hash-set
。其中两个有1元参数函数可以将其转换为所需的特定集合类型:vec
和 set
。映射和列表没有这样的函数。我认为我明白为什么映射没有:当它需要没有中间步骤进行配对匹配时,难以在与其他集合类型之间进行转换。
但是似乎缺乏一个函数可以接收任意类型的单一收集对象并将其转换为具体的持久列表。例如:(defn to-list [coll] (clojure.lang.PersistentList/create coll))
。是否存在排除此函数的特定原因?
我提出这个函数的原因是,我在构建并遍历嵌套数据结构,当Clojure核心函数操作“列表”输出非持久列表(如list*
、cons
和语法引号)时,这可能会很有挑战性。我编写了自己的to-list
函数,并在需要的位置使用它来简化决策树,在我意识到list*
不起作用后。
我知道序列抽象是Clojure心态的一个重要部分,但list?
在我所写且确信有固定大小的对象上不返回true
导致了一些挫败感。
我主要想听听关于故意排除此类函数的理由,但在此请求的基础上,如果核心团队感兴趣,我可以为此添加一个补丁。