You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

29 lines
655 B

(in-package :cl-rng)
(defparameter *default-randomness-provider* #'urandom)
(defun chance (fraction &key (provider *default-randomness-provider*))
(< (funcall provider) fraction))
(export '*default-randomness-provider*)
(export 'chance)
(defun weighted (weights &key (default nil) (provider *default-randomness-provider*))
(let ((previous 0)
(result (funcall provider))
(rval default))
(mapc (lambda (x)
(let ((value (car x))
(weight (cdr x)))
(and (>= result previous)
(<= result (+ previous weight))
(setf rval value))
(incf previous weight)))
weights)
(values rval result)))
(export 'weighted)