 (defn bind-function
   "The value of ref1 at address1 and the value of ref2 at address2
    are linked, so that if one changes, then the other changes to
-   maintain value2 == (function value1)."
+   maintain (== value2 (function value1))."
   [[ref1 address1] function inverse-function [ref2 address2]]
   (follow-function [ref1 address1] function [ref2 address2])
   (follow-function [ref2 address2] inverse-function [ref1 address1]))

  (follow [ref1 address1] [ref2 address2])
  (follow [ref2 address2] [ref1 address1]))

(defn unbind [[ref1 address1] [ref2 address2]]
  (unfollow [ref1 address1] [ref2 address2])
  (unfollow [ref2 address2] [ref1 address1]))
(defn bind-linear
  "The value of ref1 at address1 and the value of ref2 at address2
   are linked, so that if one changes, then the other chnages to
   maintain (== value2 (+ offset (* factor value1)))."
  [[ref1 address1] [factor offset] [ref2 address2]]
  (follow-linear [ref1 address1] [factor offset] [ref2 address2])
  (follow-linear [ref2 address2] [(/ factor) (- (/ offset factor))] [ref1 address1]))
