Как и во многих шаблонах проектирования, вы можете реализовать его как функцию в clojure. Это немного зависит от того, как вы представляете состояние в своей программе (ссылки, атомы, агенты) в процессе очень похожи.
Вы можете просто добавить функцию наблюдения в ваше состояние agent / ref / atom, которая добавляет состояние в список отмены каждый раз, когда происходит обновление. тогда ваша функция отмены просто ищет ее в списке отмен. Это имеет приятный эффект добавления вашего unto в список отмены, позволяя также повторить
У меня первое впечатление, что ref
s может быть правильным инструментом для этого, потому что вы сможете восстановить их все скоординированным образом, если, конечно, вы не сможете уменьшить состояние своих программ до единой идентичности Замените смысл слова) тогда вам не понадобится скоординированное обновление и агент сработает.