X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Frandom.lisp;h=53f423b53da6a85b38702d318405354a43e9061b;hb=5c649363640c2060387ed91132791e52e2c52c11;hp=ba0abf8d7833381ce3d65e0e1f697760361cff76;hpb=25b02b6e536197f46c8951fed21a452340328bb9;p=fiveam.git diff --git a/src/random.lisp b/src/random.lisp index ba0abf8..53f423b 100644 --- a/src/random.lisp +++ b/src/random.lisp @@ -191,7 +191,8 @@ BOUND)." (- (random (min (- most-negative) bound))))) type)))) -(defun gen-character (&key (code (gen-integer :min 0 :max (1- char-code-limit))) +(defun gen-character (&key (code-limit char-code-limit) + (code (gen-integer :min 0 :max (1- code-limit))) (alphanumericp nil)) "Returns a generator of characters. @@ -234,6 +235,21 @@ producs objects." repeat (funcall length) collect (funcall elements)))) +(defun gen-tree (&key (size 20) + (elements (gen-integer :min -10 :max 10))) + "Returns a generator which producs random trees. SIZE control +the approximate size of the tree, but don't try anything above + 30, you have been warned. ELEMENTS must be a generator which +will produce the elements." + (labels ((rec (&optional (current-depth 0)) + (let ((key (random (+ 3 (- size current-depth))))) + (cond ((> key 2) + (list (rec (+ current-depth 1)) + (rec (+ current-depth 1)))) + (t (funcall elements)))))) + (lambda () + (rec)))) + (defun gen-buffer (&key (length (gen-integer :min 0 :max 50)) (element-type '(unsigned-byte 8)) (elements (gen-integer :min 0 :max (1- (expt 2 8)))))