Il modo più comune che vedo nel codice Clojure per controllare una lista non vuota è utilizzare seq. Questo restituisce zero se la raccolta è vuota o seq oggetto valido altrimenti.
Esempio di utilizzo:
(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"
È anche possibile utilizzare empty? per testare il contrario (cioè prova per un insieme vuoto). Si noti che vuoto? è implementato nel codice sorgente del clojure come (not (seq coll))
in modo da poter essere sicuri con la consapevolezza che i due approcci sono fondamentalmente equivalenti.
'[]' è il vettore vuoto, non la lista vuota, non è vero? – Svante
@Svante si. Sospetto che Kevin voglia solo testare una collezione vuota in generale, ma sta usando un vettore per il suo esempio mentre dice la lista. – amalloy
Sei corretto; Ho modificato la domanda. Tuttavia, se si cerca un problema con la "lista vuota dei test del clojure", si potrebbe voler trovare questa domanda ... –