Атомно поменять атом, который хранит бесконечный ленивый след - PullRequest
0 голосов
/ 01 декабря 2018

Либо я исчерпал себя за день и не могу думать правильно, либо это невозможно, но я хотел swap! атом, который относится к бесконечной ленивой последовательности с rest последовательности, которая являетсяв настоящее время в нем

Моя программа зависает по очевидным причинам, потому что compare-and-set! пытается проверить предыдущее и новое равенство seq перед заменой.Проверка на равенство в основном никогда не завершается

Любая подсказка о том, как этого достичь?

(def  beyond-infinity (atom (repeat 1)))
(defn keep-pulling [] (swap! beyond-infinity #(rest %)))

РЕДАКТИРОВАТЬ

Ранее мой ленивый seq был rangeв котором это работало, но на REPL из-за реализации возвращенного seq, мой REPL зависал

1 Ответ

0 голосов
/ 01 декабря 2018

Проблема была в том, что мой REPL пытался реализовать бесконечную последовательность.Также то, что я упомянул о compare-and-set! проверке равенства в seq, неверно.compare-and-set! выполняет проверку равенства ссылок, а не значения!

...