游戏项目' Oware'

时间:2014-05-04 22:03:57

标签: scheme racket

我有一个关于游戏“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)

我试图更改列表缺点附加,但从未得到预期的答案形式

1 个答案:

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

根据需要。