descanso vs próximo – Clojure

Normalmente reste as nextfunçõ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 restneste caso, você terá que verificar empty?na coleção