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

haw*_*eye 10 lisp idiomatic clojure common-lisp

在Common Lisp中,您使用(null x)函数来检查空列表和nil值.

大多数逻辑上这映射到

(or (nil?  x) (= '() x))
Run Code Online (Sandbox Code Playgroud)

在clojure.有人可以建议在Clojure中使用更惯用的方法吗?

Isa*_*aac 16

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

它也是一个谓词,后缀为a ?,使你在代码中所做的更清楚一点.

=> (empty? '())
true
=> (empty? '(1 2))
false
=> (empty? nil)
true
Run Code Online (Sandbox Code Playgroud)

正如jg faustus已经指出的那样,seq可以用于类似的效果.

  • jg-faustus:我希望.defn是`(defn empty?[coll](不是(seq coll)))`. (3认同)

j-g*_*tus 10

seq也作为结束的测试,已经是惯用的

(when (seq coll)
  ...)
Run Code Online (Sandbox Code Playgroud)

来自clojure.org懒惰

它的工作原理是因为(seq nil)(seq ())都返回零.

因为nil手段false,你不需要一个明确的零测试.