Qual é a diferença entre uma seqüência e uma coleção no Clojure

Eu sou um programador Java e sou novo no Clojure. De diferentes lugares, vi sequência e coleção são usados ​​em diferentes casos. No entanto, não tenho ideia de qual é a diferença exata entre eles.

Por alguns exemplos:

1) Na documentação do Clojure paraSeqüência:

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.

Como você pode ver, ao descrever a interface Seq, as duas primeiras funções (first / rest) usamcoll o que parece indicar que esta é uma coleção enquanto ocons uso de funçãoseq o que parece indicar que isso é uma sequência.

2) Existem funções chamadascoll? eseq? que pode ser usado para testar se um valor é uma coleção ou uma sequência. É claramente coleção e seqüência são diferentes.

3) Na documentação do Clojure sobre 'Coleções', é dito:

Como as coleções suportam a função seq, todas as funções de sequência podem ser usadas com qualquer coleção

Isso significa que todas as coleções são seqüências?

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

O código acima me diz que não é assim porque[1 2 3] é uma coleção, mas não é uma sequência.

Eu acho que esta é uma questão bastante básica para o Clojure, mas eu não sou capaz de encontrar um lugar explicando isso claramente qual é a diferença deles e qual deles devo usar em casos diferentes. Qualquer comentário é apreciado.

questionAnswers(5)

yourAnswerToTheQuestion