Jaka jest różnica między sekwencją a kolekcją w Clojure

Jestem programistą Java i jestem nowym użytkownikiem Clojure. Z różnych miejsc widziałem sekwencję, a zbiór używany jest w różnych przypadkach. Nie mam jednak pojęcia, jaka jest dokładna różnica między nimi.

Dla niektórych przykładów:

1) W dokumentacji Clojure dlaSekwencja:

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.

Jak widać, opisując interfejs Seq, należy użyć dwóch pierwszych funkcji (pierwsza / spoczynkowa)coll co wydaje się wskazywać, że jest to kolekcja podczascons wykorzystanie funkcjiseq co wydaje się wskazywać, że jest to sekwencja.

2) Są funkcje zwanecoll? iseq? które można wykorzystać do sprawdzenia, czy wartość jest zbiorem lub sekwencją. Jest to wyraźnie kolekcja i sekwencja są różne.

3) W dokumentacji Clojure o „Kolekcje', mówi się:

Ponieważ kolekcje obsługują funkcję seq, wszystkie funkcje sekwencji mogą być używane z dowolną kolekcją

Czy to oznacza, że ​​wszystkie kolekcje są sekwencjami?

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

Powyższy kod mówi mi, że tak nie jest, ponieważ[1 2 3] to kolekcja, ale nie jest sekwencją.

Myślę, że jest to dość podstawowe pytanie dla Clojure, ale nie jestem w stanie znaleźć miejsca wyjaśniającego to wyraźnie, jaka jest ich różnica, a która powinna być używana w różnych przypadkach. Każdy komentarz jest doceniany.

questionAnswers(5)

yourAnswerToTheQuestion