non-NIL, limits the returned chars to those which pass
alphanumericp."
(lambda ()
- (if alphanumericp
- (loop
- for count upfrom 0
- for char = (code-char (funcall code))
- until (alphanumericp char)
- when (= 1000 count)
- do (error "After 1000 iterations ~S has still not generated an alphanumeric character :(."
- code)
- finally (return char))
- (code-char (funcall code)))))
+ (loop
+ for count upfrom 0
+ for char = (code-char (funcall code))
+ until (and char
+ (or (not alphanumericp)
+ (alphanumericp char)))
+ when (= 1000 count)
+ do (error "After 1000 iterations ~S has still not generated ~:[a valid~;an alphanumeric~] character :(."
+ code alphanumericp)
+ finally (return char))))
(defun gen-string (&key (length (gen-integer :min 0 :max 80))
(elements (gen-character))
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 (- depth current-depth)))))
+ (let ((key (random (+ 3 (- size current-depth)))))
(cond ((> key 2)
(list (rec (+ current-depth 1))
(rec (+ current-depth 1))))