Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;;; random.lisp
- ;;; Time-stamp: <2019-05-27 14:53:38 m.buchmann>
- ;;;
- ;;; A short sketch of some random data generating functions.
- ;;;
- (ql:quickload "alexandria")
- ;; * Choosing a random element from a given list.
- (defun random-draw (list &aux (len (length list)) (pos (random len)))
- "Returns a random element from LIST."
- (nth pos list))
- ;;; * Generating a random element
- (defun random-element (type &key (radix 10) (case :up))
- "Returns a random element of type :digit (depending on :radix) or
- :character (case given by :case :up, :down or :both). Limited to
- 7bit ASCII characters from A to z."
- (let ((char-range (ecase case
- (:up (alexandria:iota 26 :start 65))
- (:down (alexandria:iota 26 :start 97))
- (:both (append (alexandria:iota 26 :start 65)
- (alexandria:iota 26 :start 97))))))
- (ecase type
- (:digit (random radix))
- (:character (code-char (random-draw char-range))))))
- (defun random-list (len &key (type :digit) (radix 10) (case :up))
- "Returns a list of length LEN filled with random elements of TYPE :digit or :character."
- (loop :for i from 0 below len
- :collect (random-element type :radix radix :case case)))
- (defun random-string (len &key (case :up) &aux (result (make-array len :element-type 'character)))
- "Returns a random string of length LEN and :case (:up, :down or :both)."
- (loop :for i :from 0 :below len
- :do (setf (aref result i) (random-element :character :case case)))
- result)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement