Scheme 到达定义结构中的特定项
我真的被一些事情卡住了,我会尽量正确地回答我的问题,希望你能理解。它可能有点长,所以首先感谢你花时间阅读这篇文章 我正在尝试在Racket 5.0.2版本中创建一个名称为“相同”的游戏 下面是对游戏的解释: 我创建了一个带有磁盘的表并绘制了它:Scheme 到达定义结构中的特定项,scheme,racket,Scheme,Racket,我真的被一些事情卡住了,我会尽量正确地回答我的问题,希望你能理解。它可能有点长,所以首先感谢你花时间阅读这篇文章 我正在尝试在Racket 5.0.2版本中创建一个名称为“相同”的游戏 下面是对游戏的解释: 我创建了一个带有磁盘的表并绘制了它: a: width b: height r: radius (define (color x) ///for random colors (cond [(< (random x) 100) 'blue]
a: width
b: height
r: radius
(define (color x) ///for random colors
(cond [(< (random x) 100) 'blue]
[(< (random x) 200) 'purple]
[(< (random x) 300) 'yellow]
[(< (random x) 400) 'red]
[else 'green]))
(define-struct top (coord color))
(define (row x y)
(if (> x (- a r)) empty
(cons (make-top (make-posn x y)(color 500)) (row (+ x (* 2 r)) y))))
(define (draw-row L)
(if (empty? L) #f
(and
(draw-solid-disk (top-coord (first L)) r (top-color (first L)))
(draw-row (rest L)))))
(define (board x y)
(if (> y (- b r)) empty
(cons (row x y) (board x (+ y (* 2 r))))))
(for-each draw-row (board 20 20))
我希望你有一些更简单的替代方法,因为它看起来非常具有挑战性
2)如何在多个列表中比较磁盘的颜色?很难说出我的问题,但我会努力的。
(define table (board 20 20))
(define row1 (list-ref table 0))
(list-ref row1 0)
它将返回:
(make-top (make-posn 20 20) 'yellow)
我怎样才能到达这里的黄色?如果我够到了,我怎么能把它和其他颜色相比呢
任何想法都很好!我已经想了两天这些问题,但我还是什么都做不了
我不应该使用可变结构内置访问器的结构:
> (define my-top (make-top (make-posn 20 20) 'yellow))
> (top-color my-top)
'yellow
> (top-coord my-top)
(make-posn 20 20)
> (top? my-top)
true
顺便说一句,您的
color
函数应该只调用(随机x)
一次并存储其值(使用let
或内部define
),而不是多次调用(随机x)
。因此:(定义(颜色)(let((值(随机500))(cond(
您已经在代码中使用了顶色
和顶坐标
。是什么让您认为它们不适用于此?另外,color
函数不应接受参数。奇怪的是,调用方必须提供魔法值500
,才能使cond
语句工作。这是一个细节,颜色
应该自己保留。它可能也应该改名为随机色。@ChrisJester-Young和@GregHendershott,我知道了。在学习let
之前,我接受了这项作业。多亏了你,我修改了代码@molbdnilo,我想,我不能理解定义结构
,但我现在清楚地看到了一切。谢谢你的评论!如果你对第二个问题有什么想法,请写下来。谢谢你的回答。我甚至不知道我怎么会错过这个。然而,我仍然有很多问题。我有my-top
,这没问题,但我仍然不知道如何将其与相邻磁盘进行比较…例如,如果(相等?my-top my-top2)删除它们
…我将在不同的变量中包含每个磁盘,如my-top
,my-top2
,my-top3
。。。我想我应该在这里使用行
列表,但我不知道该怎么做。考虑一下用一个变量来表示所有状态-一个简单的列表,用于板上的所有位置(200个元素)。这件事可能会出错。使用返回当前行的辅助函数。由20个元素组成的列表。draw函数将这些绘制为行。每个游戏功能创建一个新的200元素列表作为新的世界状态。游戏本质上是事件驱动的,因此在调用每个函数后都会有一个新的世界状态。htdp2/universe教学包是球拍中的一个很好的模型。
> (define my-top (make-top (make-posn 20 20) 'yellow))
> (top-color my-top)
'yellow
> (top-coord my-top)
(make-posn 20 20)
> (top? my-top)
true