(uiop:define-package :binry-hop/updaters
(:export #:iterate-memories)
(:mix :binry-hop/util :cl)
(:nicknames :hop-updaters))

(in-package :binry-hop/updaters)

(defun iterate-memories (array memory-rereader polynomial) "
closure (idx) -> bit array updated at idx
Minimises current energy at an idx by iterating through
memory-rereader (see it and make-rectified-polynomial)
Note that your method of picking idxes factors into
the Lyapunov condition that guarantees convergence.  "
(lambda (idx)
 (loop for (memory looped) = (funcall memory-rereader)
  while (not looped)
  when memory
  sum (diff-diff-signs idx array memory polynomial)
  into energy-minimises finally
  (setf (aref array idx) (s2b energy-minimises))
  (return (values array)))))