首页 > 解决方案 > 球拍骰子功能

问题描述

我编写了一个函数来掷 dnd 的骰子:

(define (rnd [n 0] [d 0] [li '()] [count 0])
  (cond [(= n 0) '()]
        [(= count n) (values li (foldl + 0 li))]
        [(< count n) (rnd n d (cons (random 1 (+ d 1)) li) (+ count 1))]))

但我总觉得这段代码很难看。有改进的想法吗?

标签: racket

解决方案


这是一个简化版本:

(define (rnd [n 0] [d 1] [li '()])
  (if (<= n 0)
      (values li (foldl + 0 li))
      (rnd (- n 1) d (cons (random 1 (+ d 1)) li))))

请注意, 的默认值d不是1零,否则该函数仅使用一个参数就无法工作。


推荐阅读