我有一个关于游戏“Oware”的项目,我们应该在Dr.Racket程序中编写游戏。 这些是游戏的规则,他们解释得非常好,用图片说明:http://www.awale.info/jugar-a-lawale/les-regles-de-lawale/?lang=en 我有点坚持第一次练习,我有方法,但它没有以正确的顺序给出数字。
我们要编写的第一个函数称为“分布”,它应该在孔中重新放置x个粒子,以一个列表的形式给出结果,该列表由剩余的粒子数和孔的新数字组成。
这是预期的:
(distribute 5 '(2 3 1 5 5 2)) -> (0 (3 4 2 6 6 2))
(distribute 5 '(2 3 1)) -> (2 (3 4 2))
我写的:
(define distribue
(lambda (n l)
(if (or (= n 0) (null? l))
(list l n)
(cons (+ (car l) 1) (distribue (- n 1) (cdr l))))))
它给出了什么:
(distribue 5 '(2 3 1 5 5 2)) -> (3 4 2 6 6 (2) 0)
(distribue 5 '(2 3 1)) -> (3 4 2 () 2)
我试图更改列表缺点附加,但从未得到预期的答案形式
答案 0 :(得分:0)
怎么样
(define (distribue n l)
(define (iterator n p q)
(if (or (= n 0) (null? q))
(list n (append p q))
(iterator (- n 1) (append p (list (+ 1 (car q)))) (cdr q))))
(iterator n '() l))
,其中
(distribue 5 '(2 3 1 5 5 2))
(distribue 5 '(2 3 1))
返回
'(0 (3 4 2 6 6 2))
'(2 (3 4 2))
根据需要。