如何检查一个序列是否增加+1增量clojure?

时间:2014-09-21 17:03:34

标签: clojure functional-programming

我正在用clojure制作扑克游戏我有一个类似的功能:

(sort (map rank straight-hand))

以排序顺序返回手的等级,比如说

(2 3 4 5 6)

如何检查序列中前面的数字和当前数字的差异是1

3 个答案:

答案 0 :(得分:8)

(every? #{1} (map - (rest hand) hand))

这会验证从您手中的以下项目中减去项目的每个结果都在集#{1}

答案 1 :(得分:3)

使用(partition 2 1 <seq>)将已排序的序列分成重叠的两个组,然后得到每组两个的差异,然后测试每个差异是否为-1:

(defn incrementing?
  [xs]
  (every? #(= % -1) (map #(apply - %) (partition 2 1 xs))))

答案 2 :(得分:2)

这是另一种方式:你想要检查你拥有的是一个范围。因此,将它与列表中第一个和最后一个元素之间的范围进行比较。

  (= xs (range (first xs)
           (inc (last xs))))