В языке Common LISP Вы используете (пустой указатель x) функция для проверки на пустые списки и нулевые значения.
Наиболее логически это отображается на
(or (nil? x) (= '() x))
В clojure. Кто-то может предложить более идиоматический способ сделать это в Clojure?
Чтобы получить такой же результат для пустого списка в Clojure, как и в Common Lisp, используйте функцию empty?
. Эта функция находится в основной библиотеке: импортировать ее не нужно.
Она также является предикатом и имеет суффикс ?
, что делает немного понятнее, что именно вы делаете в коде.
=> (empty? '())
true
=> (empty? '(1 2))
false
=> (empty? nil)
true
Как уже отметил j-g faustus, для аналогичного эффекта можно использовать seq
.
seq также служит тестом для завершения, уже идиоматический
(когда (seq coll) ...)
Это работает, потому что (seq nil)
и (seq ())
оба возвращают nil.
А поскольку nil
означает false
, вам не нужен явный тест на nil.