验证列表的所有元素是否相等

Verify that all elements of a list are equal

我有一个案例,我需要检查列表中的所有字符串元素是否相等,并且我试图弄清楚最惯用的解决方案是什么样的。我目前的方法是,将 map 应用于列表,检查每个元素是否等于第一个,然后使用 '=':

减少结果布尔列表
(def string-list '("3" "3" "3" "3" "3" "3"))
(reduce = (map #(.equals (first string-list) %) string-list))

显然,这不是一个很好的解决方案。是否有更多 "clojure style" 解决方案,甚至是我尚未看到的更简单的方法?

正如@Symfrog 回答的那样,使用 apply= 看起来最好。

(apply = string-list)

也许看起来可以使用 distinct 函数或 set,但是,这不是一个好主意,因为它们不适用于无限序列,尽管正确答案将 return很快。

;; works for small sequence, however, will not work for infinite sequence like (range)
(= 1 (count (distinct string-list))) ; bad idea
(= 1 (count (into #{} string-list))) ; bad idea

您可以使用以下内容:

(apply = string-list)