идиоматический способ заменить (null x) функцию из общего lisp в clojure - PullRequest
10 голосов
/ 13 июля 2010

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

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

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

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

Ответы [ 2 ]

16 голосов
/ 13 июля 2010

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

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

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

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

10 голосов
/ 13 июля 2010

seq также служит тестом на завершение, уже идиоматическим* и (seq ()) оба возвращают ноль.

А так как nil означает false, вам не требуется явный ноль-тест.

...