racket - 球拍骰子功能
问题描述
我编写了一个函数来掷 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))]))
但我总觉得这段代码很难看。有改进的想法吗?
解决方案
这是一个简化版本:
(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
零,否则该函数仅使用一个参数就无法工作。
推荐阅读
- r - R - 用多对替换列值
- r - 如何对通过 igraph 社区检测获得的集群进行评分
- javascript - 单击数据表行时出现错误:'无法读取未定义的属性'1''
- javascript - 在 Javascript 中使用 this 获取数字的值
- c++ - 为什么我们必须重载“<”运算符才能使用 is_permutation 并包含算法
- json - 如何从json响应中多次获取相同的密钥?
- python - 为数据框中两个列值的组合添加特定条件的新列
- rabbitmq - 在rabbitmq中实现消息处理器来处理接收到的消息
- python - How to plot Gaussian shaped histogram in python?
- python-3.6 - 如果发生importError,如何使包在剩余的sys.path中搜索?