如何在Clojure中测试空向量

时间:2011-11-21 22:09:10

标签: clojure

在Clojure中测试空向量的最佳方法是什么?我预计这会打印错误:

(if [] "true" "false")

但事实并非如此。这样做:

(if (> (count []) 0) "true" "false")

但不实用 - 是否有较短的构造?

3 个答案:

答案 0 :(得分:30)

使用标准谓词(empty? list)

答案 1 :(得分:18)

我在Clojure代码中看到的检查非空列表的最常见方法是使用seq。如果集合为空,则返回nil,否则返回有效的seq对象。

使用示例:

(seq [])
=> nil

(seq nil)
=> nil

(seq [1 2 3])
=> (1 2 3)         ;; note this is a "true value"

(if (seq [1 4 6]) "true" "false")
=> "true"

(if (seq []) "true" "false")
=> "false"

您也可以使用empty?来测试相反的方法(即测试空集)。请注意空?在clojure源代码中实现为(not (seq coll)),因此您可以安全地知道这两种方法基本相同。

答案 2 :(得分:0)

除了Mishadoff的答案(更具可读性),您还可以与空列表进行比较(并保存两个字符):

(if (= () []) "true" "false")
嗯......我仍然认为我更喜欢Mishadoff的回答。