clojure中从common lisp替换(null x)函数的惯用方法

clojure中从common lisp替换(null x)函数的惯用方法,clojure,lisp,common-lisp,idioms,Clojure,Lisp,Common Lisp,Idioms,在CommonLisp中,使用(null x)函数检查空列表和nil值 从逻辑上讲,这与 (or (nil? x) (= '() x)) 在clojure。有人能推荐一种更惯用的方法在Clojure中使用吗 seq还可作为终端的测试, 已经习惯了 (when (seq coll) ...) 从 它之所以工作是因为(seq nil)和(seq())都返回nil 由于nil表示false,因此不需要显式的nil测试。要在Clojure中为空列表获得与在Common Lisp中相同的结果,请

在CommonLisp中,使用(null x)函数检查空列表和nil值

从逻辑上讲,这与

(or (nil?  x) (= '() x))
在clojure。有人能推荐一种更惯用的方法在Clojure中使用吗

seq还可作为终端的测试, 已经习惯了

(when (seq coll)
  ...)

它之所以工作是因为
(seq nil)
(seq())
都返回nil


由于
nil
表示
false
,因此不需要显式的nil测试。

要在Clojure中为空列表获得与在Common Lisp中相同的结果,请使用
empty?
函数。此函数位于核心库中:无需导入。

它也是一个谓词,后缀为
,使它更清楚地显示出您在代码中到底在做什么

=> (empty? '())
true
=> (empty? '(1 2))
false
=> (empty? nil)
true

正如j-g faustus已经指出的,
seq
可以用于类似的效果。

在Lisp中,
NIL
()
(空列表)是一回事。您的代码片段是多余的。不在Clojure中:
(='()nil)=>false
。在其他Lisp中,这是正确的。斯万特:你的陈述在Clojure中可能不正确,但我有一个新的最喜欢的词。没有空值?在CL中,只有null(和endp)。您的答案更好,因为它也可以处理向量、映射、字符串等,而不需要将它们转换为seq。我想如果你有一个未知类型的参数,并且想处理一个seq,那么seq方法是合适的。j-g-faustus:我希望如此。defn是
(defn为空?[coll](不是(seq coll))
。哈哈,哇,真不敢相信我们错过了。两年后,但在这里知道和拥有肯定很好。引文链接:。通过展开“源代码”框查看源代码。