Я программист на Java и новичок в Clojure. Из разных мест я видел, как последовательность и коллекция используются в разных случаях. Тем не менее, я понятия не имею, какова точная разница между ними.
Для некоторых примеров:
1) В документации Clojure для Sequence:
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, но я не могу найти место, объясняющее это ясно, в чем их различие и какой из них мне следует использовать в разных случаях. Любой комментарий приветствуется.