dices


A dices Roller for Gauche..

 (use srfi-27) 
  
 (random-source-randomize! default-random-source) 
  
 (define-class <dice>  
   ()  
   ((faces :init-form 6 :accessor faces-of :init-keyword :faces) 
    (result :allocation :virtual :accessor roll  
            :slot-ref (lambda (self) 
                        (+ (random-integer (faces-of self)) 1))))) 
  
 (define-macro make-dice  
   (lambda (faces) 
     `(define ,(string->symbol  
                (string-append "d" (number->string faces)))  
        (make <dice> :faces ,faces)))) 
   
 (make-dice 4) 
 (make-dice 6) 
 (make-dice 8) 
 (make-dice 10) 
 (make-dice 12) 
 (make-dice 20) 
 (make-dice 100) 
  
 (define (throw-dices num dice) 
   (let ((rolls  (map (lambda (x) (roll dice)) (make-list num)))) 
     (values rolls (apply + rolls)))) 
    

category-code