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))))