В чем разница между последовательностью и коллекцией в Clojure

Я программист на Java и новичок в Clojure. Из разных мест я видел, как последовательность и коллекция используются в разных случаях. Тем не менее, я понятия не имею, какова точная разница между ними.

Для некоторых примеров:

1) В документации Clojure дляПоследовательность:

The Seq interface
(first coll)
  Returns the first item in the collection. 
  Calls seq on its argument. If coll is nil, returns nil.
(rest coll)
  Returns a sequence of the items after the first. Calls seq on its argument. 
  If there are no more items, returns a logical sequence for which seq returns nil.
(cons item seq)
  Returns a new seq where item is the first element and seq is the rest.

Как вы можете видеть, при описании интерфейса Seq первые две функции (first / rest) используютcoll который, кажется, указывает на то, что это коллекция, аcons использование функцииseq который, кажется, указывает на то, что это последовательность.

2) Есть функции, называемыеcoll? а такжеseq? это может использоваться, чтобы проверить, является ли значение коллекцией или последовательностью. Это явно сбор и последовательность разные.

3) В документации Clojure оКоллекции', говорят:

Поскольку коллекции поддерживают функцию seq, все функции последовательности могут использоваться с любой коллекцией.

Означает ли это, что все коллекции являются последовательностями?

(coll? [1 2 3]) ; => true 
(seq? [1 2 3]) ; => false

Код выше говорит мне, что это не такой случай, потому что[1 2 3] это коллекция, но не последовательность.

Я думаю, что это довольно простой вопрос для Clojure, но я не могу найти место, объясняющее это ясно, в чем их различие и какой из них мне следует использовать в разных случаях. Любой комментарий приветствуется.

Ответы на вопрос(5)

Ваш ответ на вопрос