Идиоматический способ замены (null x) функции из общего lisp в clojure
В Common Lisp вы используете функцию (null x) для проверки пустых списков и значений nil.
Наиболее логично это сопоставление с
(or (nil? x) (= '() x))
В clojure. Может ли кто-то предложить более идиоматический способ сделать это в Clojure?
Ответы
Ответ 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.