От manual of clojure около seq
мы читаем: ;; (seq x) is the recommended idiom for testing if a collection is not empty (every? seq ["1" [1] '(1) {:1 1} #{1}]) ;;=> true
. Но пустая коллекция возвращает себя также nil
, так что точка этого использования seq
для проверки пустоты коллекции?Использование функции Seq в Clojure
2
A
ответ
3
пустая коллекция не falsey, поэтому в тесте не будет иметь значения, если он пустой или нет:
(if '() "a" "b")
=> "a"
Так что, если вы хотите сделать что-то другое, если он пуст:
(if (seq '()) "a" "b")
=> "b"
3
Из документов в верхней части этой страницы:
далее также работает на нитях, родной Java массивы (ссылочных типов) и любые объекты, которые реализуют Iterable
Таким образом, используя сл для проверки работы пустоты по любому из этих типов коллекций. Таким образом, вы получаете последовательный идиоматический способ проверки пустоты на любом из этих типов, как демонстрирует пример.
Тот факт, что seq возвращает nil
как на пустую коллекцию, так и на nil
, делает проверку более простой, а не проверяет наличие пустого или нулевого.
Смежные вопросы
- 1. Clojure: разбить SEQ основанный на SEQ значений
- 2. Преобразование SEQ в векторный Clojure
- 3. Clojure ленивые-SEQ Природные Числа
- 4. Clojure прочитало содержание lazy-seq ({})
- 5. Clojure: как проверить, является ли seq «подсектором» другого seq
- 6. Clojure lazy seq потребление от разных положений в теле функции
- 7. Clojure уменьшить SEQ карт на карте векторов
- 8. Clojure seq return function vs direct 'def' of seq
- 9. clojure: создать lazy-seq, содержащий другой lazy-seq
- 10. Создать lazy seq с рекурсией в Clojure?
- 11. Когда следует избегать использования `seq` в Clojure?
- 12. Clojure Lazy Seq Результаты в переполнении стека
- 13. Какая точка ленивого seq в clojure?
- 14. Нелинейное замедление, создающее ленивый seq в Clojure
- 15. clojure: Удаление карт с ленивого seq карт
- 16. Использование seq vectorwise
- 17. Использование функций Seq в IEnumerable
- 18. Использование ленивых последовательностей в clojure
- 19. clojure: как получить значения от ленивого seq?
- 20. Clojure lazy-seq дает мне ArithmeticException
- 21. Clojure: cons (seq) vs. conj (список)
- 22. Использование Clojure deftype в качестве параметризованной функции
- 23. Использование списка в качестве тела функции Clojure
- 24. Выполнение функции GMSL seq
- 25. Использование Seq в emgu C#
- 26. Использование планировщиков clojure
- 27. Clojure: Проверка в функции VARIADIC
- 28. В чем разница между seq и sequence в Clojure?
- 29. Как присоединиться к Seq с массивом в Clojure?
- 30. Clojure: поиск/замена значений в динамической вложенной карте/seq
'(=() nil) ---> false' – lispHK01
Пустая коллекция делает * not * return' nil'. Вероятно, вы думаете о nil-punning, который работает в другом направлении: если у вас есть «nil», и вы ищете последовательность, она будет действовать как пустая. * Но не наоборот *. В [other lisps] (http://clojure.org/lisps) ваш пробег будет варьироваться: * Пустые коллекции отличны от нуля. Clojure не приравнивает nil и '(). * – Thumbnail