идиоматический способ заменить (пустой указатель x) функционирует от языка Common LISP в clojure

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

Наиболее логически это отображается на

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

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

10
задан hawkeye 17 July 2010 в 07:08
поделиться

2 ответа

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

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

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

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

16
ответ дан 3 December 2019 в 16:08
поделиться

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

 (когда (seq coll)
 ...)

Из clojure.org lazy

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

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

10
ответ дан 3 December 2019 в 16:08
поделиться