Normalmente rest
e as next
funções se comportam da mesma forma:
(next [:a :b :c])
-> (:b :c)
(rest [:a :b :c])
-> (:b :c)
A exceção é quando a coleção está vazia:
(next [])
-> nil
(rest [])
-> ()
next
é útil ao criar um loop que quebra quando a coleção é nula:
(loop [m-map {}
m-keys [:a :b :c]
m-vals [1 2 3]]
(if (and m-keys m-vals)
(recur (assoc m-map (first m-keys) (first m-vals))
(next m-keys)
(next m-vals))
m-map))
-> {:c 3, :b 2, :a 1}
Se você usar rest
neste caso, você terá que verificar empty?
na coleção