(defun fit (x) (abs (- (+ (* 2 x) 10) (+ (* -5 x) 9)))) (defun experiment (&optional out (max 100) (min -100) (best (fit max)) (max-lives 9) (lives max-lives)) (print `(,min ,max)) (if (zerop lives) (values out best) (let* ((guess (+ min (* (randf 1) (- max min)))) (score (fit guess))) (if (< score best) (let ((left (- max guess)) (right (- guess min))) (if (< left right) (setf max (/ (+ max guess) 2)) (setf min (/ (+ min guess) 2))) (experiment guess max min score max-lives max-lives)) (experiment out max min best max-lives (1- lives))))))