问题描述
任务定义:我要做挂在绳子上的南瓜和鱼
使用的术语:
What-is-it?==>决定是做鱼还是做南瓜的函数
fish-squared==>使用2个参数制作鱼的函数
南瓜==>制作南瓜的函数,也有2个参数
装饰==>将所有图像追加到一起的函数
HANG-BY-THREAD==>将所有图像挂到一个线程的函数
额外
在本练习中,我必须使用"(如果(奇数?k)鱼块南瓜))"与此完全一样
问题
当我执行我的程序时,它需要一段时间,然后崩溃,所以我怀疑它被困在循环中
代码:
(define (fun-string n r)
(define (what-is-it k)
(if (odd? k) fish-squared pumpkin))
(define (decorations k)
(ht-append ((what-is-it k) r r)
(decorations (- k 1))))
(hang-by-thread (decorations n)))
目标:
本练习的目标是学习如何将槽函数作为参数传递,这是该方案能够做到的。
非常感谢
编辑*
我已经添加了基线,仍然存在同样的问题,以下是所有代码:
(define (lampion r l)
(vc-append (filled-rectangle 2 l) (pumpkin r)))
(define (hang-by-string pumpkins)
(vc-append (filled-rectangle (pict-width pumpkins) 2)
lampionnetjes))
(define (fish-square wh l)
(vc-append (filled-rectangle 2 l) (fish wh wh)))
(define (fun-string n r)
(define (what-is-it k)
(if (odd? k) fish-square pumpkin))
(define (decorations k)
(if (= k 1) fish-square)
(ht-append ((what-is-it k) r r)
(decorations (- k 1))))
(hang-by-string (decorations n)))
推荐答案
您尚未通过
实现uselpa's suggestion(define (decorations k)
(if (= k 1) fish-square) ; the results of this line are discarded
(ht-append ((what-is-it k) r r)
(decorations (- k 1))))
因为您丢弃了if
语句的结果SO并返回
(ht-append ((what-is-it k) r r)
(decorations (- k 1)))
与原始代码一样。条件的形式为
(if test
then-part
else-part)
所以您需要的是
(define (decorations k)
(if (= k 1)
fish-square
(ht-append ((what-is-it k) r r)
(decorations (- k 1)))))