Scheme 游戏“Oware”的项目
我有一个关于游戏Oware的项目,我们应该在Dr.Racket程序中编写游戏。 这些是游戏规则,它们解释得很好,用图片说明: 我在第一个练习中有点卡住了,我有这个方法,但是它没有按照正确的顺序给出数字 我们必须编写的第一个函数叫做distribute,它应该在孔中重新放置x个晶粒,以列表的形式给出结果,该列表由剩余晶粒的数量和孔的新数量组成 这是人们所期望的:Scheme 游戏“Oware”的项目,scheme,racket,Scheme,Racket,我有一个关于游戏Oware的项目,我们应该在Dr.Racket程序中编写游戏。 这些是游戏规则,它们解释得很好,用图片说明: 我在第一个练习中有点卡住了,我有这个方法,但是它没有按照正确的顺序给出数字 我们必须编写的第一个函数叫做distribute,它应该在孔中重新放置x个晶粒,以列表的形式给出结果,该列表由剩余晶粒的数量和孔的新数量组成 这是人们所期望的: (distribute 5 '(2 3 1 5 5 2)) -> (0 (3 4 2 6 6 2)) (distribute 5
(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)
我试图更改列表,但从未得到预期的答案形式怎么样
(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))
在哪里
返回
'(0 (3 4 2 6 6 2))
'(2 (3 4 2))
根据需要。谢谢您的帮助,尽管我有一些问题。我们从未在这种情况下编写过代码,我们先编写define,然后编写lambda。这两者之间的区别是什么?您编写的代码中的迭代器是什么?那p呢?如果我没弄错的话,n和我一样,q是列表define fxy x y+xy或多或少和define fxy lambda x y+xy y相同p是列表的第一部分,我们在每个杯子中添加了一个豆子,q是列表的第二部分,豆子可能还需要添加。啊,好的,我想我现在知道了。为什么我认为迭代器是另一个预定义的代码,只是意识到情况并非如此。多谢各位:
'(0 (3 4 2 6 6 2))
'(2 (3 4 2))