gpt4 book ai didi

clojure - 写这个的最惯用的 Clojure 方式是什么?

转载 作者:行者123 更新时间:2023-12-03 21:44:24 24 4
gpt4 key购买 nike

我编写了执行此操作的函数(显示比解释更容易):
(split 2 (list 1 2 3 4 5 6))=> ((1 2) (2 3) (3 4) (4 5) (5 6))

(defn split [n xs] 
(if (> (count xs) (dec n))
(cons (take n xs) (split n (rest xs)))
'()))

我知道在 Clojure 中,列表并不是唯一的一流数据结构。编写这种与数据结构无关的数据是否有意义?无论如何,我的实现是最有效的,如果不是,我将如何使其更有效和/或更惯用?

谢谢!

最佳答案

您可以使用内置的分区功能,

(partition 2 1 (list 1 2 3 4 5 6))
=> ((1 2) (2 3) (3 4) (4 5) (5 6))

适用于任何序列。

clojure.core/partition
([n coll] [n step coll] [n step pad coll])
Returns a lazy sequence of lists of n items each, at offsets step
apart. If step is not supplied, defaults to n, i.e. the partitions
do not overlap. If a pad collection is supplied, use its elements as
necessary to complete last partition upto n items. In case there are
not enough padding elements, return a partition with less than n items.

关于clojure - 写这个的最惯用的 Clojure 方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3100111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com