Recently Written · git

common-lisp-utils

My utilities for Common Lisp programming.

git clone https://github.com/equwal/common-lisp-utils

Log | Files | Refs


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)