Подтвердить что ты не робот

Идиоматический способ замены (null x) функции из общего lisp в clojure

В Common Lisp вы используете функцию (null x) для проверки пустых списков и значений nil.

Наиболее логично это сопоставление с

(or (nil?  x) (= '() x))

В clojure. Может ли кто-то предложить более идиоматический способ сделать это в Clojure?

4b9b3361

Ответ 1

Чтобы получить тот же результат для пустого списка в Clojure, как вы это делаете в Common Lisp, используйте функцию empty?. Эта функция находится в основной библиотеке: импорт не требуется.

Он также является предикатом и суффикс с ?, что немного разъясняет, что именно вы делаете в коде.

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

Как уже отмечалось j-g faustus, для аналогичного эффекта можно использовать seq.

Ответ 2

seq также служит в качестве теста для конца, уже идиоматический

(when (seq coll)
  ...)

От clojure.org lazy

Это работает, потому что (seq nil) и (seq ()) оба возвращают nil.

И поскольку nil означает false, вам не нужен явный тест nil.