【发布时间】:2016-02-13 21:28:05
【问题描述】:
我正在寻找一种非常适合以下操作的顺序数据结构。列表的长度保持不变,它永远不会比固定长度长或短。
省略第一项并在末尾添加 x。
(0 1 2 3 4 5 6 7 8 9)
(pop-and-push "10")
(1 2 3 4 5 6 7 8 9 10)
只有一个其他读取操作必须同样频繁地完成:
(last coll)
pop-and-push 可以这样实现:
(defn pop-and-push [coll x]
(concat (pop coll) ["x"]))
(不幸的是,这不适用于例如 range 生成的序列,它只会在传递由文字 '(..) 声明的序列时弹出。)
但这是最优的吗?
【问题讨论】:
-
描述
'()与(range n)问题的更清晰的方法是pop的这种用法适用于列表,但不适用于其他集合类型(对于惰性有各种不正确的行为- seqs、vectors、sets、arrays、strings 等,从显式错误到只得到错误输出而没有检测到错误)。
标签: clojure functional-programming clojurescript