Я считаю, что это пример "держаться за голову".
Делая ссылку r1 во втором примере, вы открываете возможность позже сказать что-то вроде (first r1)
, так что вы в конечном итоге будете хранить членов вашего lazy-seq по мере их реализации.
В первом случае Clojure может определить, что ничего не будет сделано с более ранними членами бесконечной последовательности, поэтому они могут быть уничтожены и не потреблять память.
Я все еще сам начинающий на Clojure, любые комментарии или исправления к моему пониманию или терминологии очень ценятся.