Loading

Paste #p5w6libyd

  1.  
  2.  
  3.     ;; From this:
  4.     (defmacro with-percent-chance (percent &body body)
  5.       (alexandria:with-gensyms (num calculation)
  6.         (setf calculation (cond ((>= percent 100) 100)
  7.                                 ((zerop percent)  0)
  8.                                 (t '(1+ (random 100)))))
  9.         `(let ((,num ,calculation))
  10.            (cond ((zerop ,num) 0)
  11.                  ((<= ,num ,percent) ,@body)
  12.                  (t nil)))))
  13.      
  14.      
  15.     ;; To this:
  16.     (defmacro do-with-%-chance-of (percent &body body)
  17.       (cond ((>= 0 percent) nil)
  18.             ((<= 100 percent) `(progn ,@body))
  19.             (t `(when (<= (1+ (random 100)) ,percent)
  20.                   ,@body))))