В чем разница между функциями seq?, последовательными? и колла?
В чем разница между функциями seq? последовательный? и coll?
Я нашел некоторую информацию, разбросанную по всему Интернету, но я думаю, что было бы лучше централизовать эту информацию здесь.
Ответ 1
seq? - это предикат, который возвращает true, если аргумент реализует интерфейс ISeq, то есть он предоставляет методы first, rest, cons. См. http://clojure.org/sequences.
(seq? [1 2])
false
(seq? (seq [1 2]))
true
sequential? - предикат, который возвращает true, если аргумент реализует интерфейс Sequential. Sequential является интерфейсом маркера (без методов) и является обещанием, что сбор может быть повторен в определенном порядке (например, список, но не карта).
(sequential? [])
true
(sequential? {})
false
coll? - предикат, который возвращает true, если его аргумент implments IPersistentCollection. Так, например, структуры данных clojure вернули бы true, тогда как собственные структуры данных Java не будут: