commit 43a9035dca553dd09778836994056e0bdb786b2f Spenser Truex <spensertruexonline@gmail.com> 2018-11-29 18:52:00 -0800 estimator.
estimator.lisp | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-)
diff --git a/estimator.lisp b/estimator.lisp index d53fb46..0864896 100644 --- a/estimator.lisp +++ b/estimator.lisp @@ -1,28 +1,27 @@ (defpackage :est - (:use :cl :utils :brain)) -(defun est (fn too-high? too-low? bigger smaller &optional (guess 1)) + (:use :cl :utils)) +(defun est (fn larger? bigger smaller &optional (guess 1)) (let ((r (funcall fn guess))) - (cond ((funcall too-high? r) (est fn too-high? too-low? bigger smaller (funcall smaller guess))) - ((funcall too-low? r) (est fn too-high? too-low? bigger smaller (funcall bigger guess))) + (cond ((funcall larger? r) (est fn larger? bigger smaller (funcall bigger guess))) + ((not (funcall larger? r)) (est fn larger? bigger smaller (funcall smaller guess))) (t guess)))) -(defun est-num (fn goal error &optional (guess 1)) +(defun est-num (fn larger?) (est fn - (lambda (g) (< (+ goal error) g)) - (lambda (g) (> (- goal error) g)) + Larger? (lambda (g) (* g (1+ (random 1.0)))) (lambda (g) (* g (random 1.0))) - guess)) + 1)) (defun final (str) (aref str (1- (length str)))) (defun zero (str) (char str 0)) -(let ((bf "")) - (dostring (goalc "hello, world!") - (est (lambda (g) (when (char= goalc (zero (fuck #1=(concatenate 'string g ".")))) (setf bf (concatenate 'string bf #1#)))) - - (lambda (g) (char> (zero (fuck (concatenate 'string g "."))) goalc)) - (lambda (g) (char< (zero (fuck (concatenate 'string g "."))) goalc)) - - (lambda (g) (mkstr g "+")) - (lambda (g) (mkstr g "-")) - "+"))) +(let ((count 0) + (acc nil)) + (est #'identity #'(lambda (x) + (incf count) + (push x acc) + (if (< 1000 count) (error "~A x: ~A" acc x)) + (handler-case (code-char x) + (type-error nil nil))) + #'(lambda (x) (ceiling (* x (+ (/ 3 2) (random 1.0))))) + #'(lambda (x) (ceiling (* x (random 1.0))))) 1000.0)