               (alternate (list-to-open-close-sequence p1)
                          (list-to-open-close-sequence p2)
                          alternation-rate
-                         alignment-deviation)
+                         alignment-deviation
+                         max-points)
               mutation-rate
               use-ultra-no-paren-mutation
               atom-generators)))))))

;  (println (balance s)))

(defn alternate
  [s1 s2 alternation-rate alignment-deviation]
  (let [s1 (vec s1)
        s2 (vec s2)]
    (loop [i 0
           use-s1 (lrand-nth [true false])
           result []]
      (if (or (>= i (count (if use-s1 s1 s2)))
              (> (count result) 10000)) ;; runaway growth
        (apply list result)
        (if (< (lrand) alternation-rate)
          (recur (max 0 (+' i (Math/round (*' alignment-deviation (gaussian-noise-factor)))))

                                               ultra-mutation-rate
                                               use-ultra-no-paren-mutation
                                               ultra-pads-with-empties
                                               atom-generators
                                               max-points)]
    (if (> (count-points new-program) max-points)
      parent1
      (make-individual :program new-program :history (:history parent1)
