0

任务定义:我要做南瓜和鱼挂在绳子上

使用的术语:

它是什么?==>一个决定是做鱼还是做南瓜的函数

fish-squared ==> 一个使用 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)))
4

2 回答 2

2

看起来您在 procedure 中缺少基本情况decorations。您应该测试是否 k <= 0,然后停止。

于 2013-10-30T11:19:55.087 回答
1

你还没有通过做实现uselpa 的建议

(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语句的结果,并返回了

(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)))))
于 2013-10-30T14:15:24.790 回答