Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. ;;;; random.lisp
  2. ;;; Time-stamp: <2019-05-27 14:53:38 m.buchmann>
  3. ;;;
  4. ;;; A short sketch of some random data generating functions.
  5. ;;;
  6.  
  7. (ql:quickload "alexandria")
  8.  
  9. ;; * Choosing a random element from a given list.
  10. (defun random-draw (list &aux (len (length list)) (pos (random len)))
  11. "Returns a random element from LIST."
  12. (nth pos list))
  13.  
  14. ;;; * Generating a random element
  15. (defun random-element (type &key (radix 10) (case :up))
  16. "Returns a random element of type :digit (depending on :radix) or
  17. :character (case given by :case :up, :down or :both). Limited to
  18. 7bit ASCII characters from A to z."
  19. (let ((char-range (ecase case
  20. (:up (alexandria:iota 26 :start 65))
  21. (:down (alexandria:iota 26 :start 97))
  22. (:both (append (alexandria:iota 26 :start 65)
  23. (alexandria:iota 26 :start 97))))))
  24. (ecase type
  25. (:digit (random radix))
  26. (:character (code-char (random-draw char-range))))))
  27.  
  28. (defun random-list (len &key (type :digit) (radix 10) (case :up))
  29. "Returns a list of length LEN filled with random elements of TYPE :digit or :character."
  30. (loop :for i from 0 below len
  31. :collect (random-element type :radix radix :case case)))
  32.  
  33. (defun random-string (len &key (case :up) &aux (result (make-array len :element-type 'character)))
  34. "Returns a random string of length LEN and :case (:up, :down or :both)."
  35. (loop :for i :from 0 :below len
  36. :do (setf (aref result i) (random-element :character :case case)))
  37. result)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement