打印交替图片的高阶程序

时间:2013-10-30 10:58:43

标签: scheme racket

任务定义 :我必须把南瓜和鱼挂在一根绳子上

使用的术语:

什么,是吗? ==>确定是制作鱼还是南瓜的功能

鱼平方==>使用2个参数制作鱼的功能

南瓜==>用2个参数制作南瓜的功能

decorations ==>将所有图像附加在一起的函数

hang-by-thread ==>将所有图像挂起到线程的函数

额外

对于这个练习我必须使用“(if(奇怪?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)))

2 个答案:

答案 0 :(得分:2)

您似乎缺少程序decorations中的基本案例。你应该测试k <= 0,并且停止。

答案 1 :(得分:1)

您尚未通过

实施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语句的结果并返回

的值
(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)))))