添加到列表的前缀很简单:
user=> (conj '(:bar :baz) :foo)
(:foo :bar :baz)追加到向量很容易:
user=> (conj [:bar :baz] :foo)
[:bar :baz :foo]如何(惯常地)预置向量,同时返回一个向量?这不起作用,因为它返回一个seq,而不是一个向量:
user=> (cons :foo [:bar :baz])
(:foo :bar :baz)这是丑陋的(IMVHO):
user=> (apply vector (cons :foo [:bar :baz]))
[:foo :bar :baz]注意:我基本上只想要一个可以附加和预先添加的数据结构。附加到大的列表应该会有很大的性能损失,所以我想到了向量。
发布于 2018-12-22 03:53:42
如果你不怕引用准引号,这个解决方案实际上是相当优雅的(对于“优雅”的一些定义):
> `[~:foo ~@[:bar :baz]]
[:foo :bar :baz]实际上,我有时会在真实的代码中使用它,因为声明性语法使它具有很好的可读性。
https://stackoverflow.com/questions/4095714
复制相似问题