scheme - 在球拍练习中循环
问题描述
我正在尝试在How to Design Programs ( HTDP ) 第 2 版的第 3 章练习 45 中做一个练习。
所以练习要我让一只猫的形象出现在场景的一侧,然后重新出现在起始侧。基本上是一个循环。我已经坚持这个练习一个多星期了,似乎无法正确理解逻辑。我到处寻找不同的观点,所以我不必征求意见,但我被困住了。我想完成这个练习,所以我可以从中学习。
(require 2htdp/batch-io)
(require 2htdp/universe)
(require 2htdp/image)
(define cat1 . )
(define WIDTH 300)
(define HEIGHT 100)
(define RESTART-POINT (+ WIDTH (image-width cat1)))
(define BACKGROUND (empty-scene WIDTH HEIGHT))
(define cat1-CENTER-TO-TOP
(- HEIGHT (/ (image-height cat1) 2)))
(define Y-cat1 cat1-CENTER-TO-TOP)
(define cat1-CENTER-TO-WIDTH
(/ (image-width cat1) 2))
(define (main x0)
(big-bang x0
[on-tick tock]
[to-draw render]))
(define (tock x)
(+ x 3))
#old version
(define (render x)
(cond
[(>= (tock x) RESTART-POINT)
(place-image cat1 (tock(- (tock x) (tock x))) Y-cat1 BACKGROUND)]
[(<= (tock x) RESTART-POINT)
(place-image cat1 (tock x) Y-cat1 BACKGROUND)]))
#new version
(define (render x)
(cond
[(< (tock x) RESTART-POINT)
(place-image cat1 (tock x) Y-cat1 BACKGROUND)]
[(>= (tock x) RESTART-POINT)
(place-image cat1 (modulo(tock x)RESTART-POINT) Y-cat1 BACKGROUND)]))
这会在屏幕上运行一只猫的图片,但这只猫永远不会像我想要的那样重新出现在左侧。
解决方案
感谢@calculuswhiz 的提示。这是一个简单的修复,将模数添加到 tock 函数。
(define (render x)
(cond
[(< (tock x) RESTART-POINT)
(place-image cat1 (tock x) Y-cat1 BACKGROUND)]
[(>= (tock x) RESTART-POINT)
(place-image cat1 (modulo(tock x)RESTART-POINT) Y-cat1 BACKGROUND)]))
推荐阅读
- java - jSS7中的SendParameters奇怪的行为
- r - R 中的优化 - 给每个场合一个组长,每个人都应该至少被选择一次
- python - 根据列名中是否存在后缀对列进行排序
- python - 带有大型视频文件的 jupyter 中的 mattplotlib 动画
- odoo-13 - 下面的表达式有什么作用?
- python - 如何在python中递归选择排序中返回交换次数的值
- python - 如何在 python 2.7 中验证字符串是有效的 UTF-8 字符串
- audio - 哪些计算机资源用于音频处理?
- mysql - MySQL:如何使用我们的新表结构对链接项目进行匹配?
- python - 我无法导入 tensorflow,请帮我解决它