打印交替图片的高阶程序

人气:494 发布:2022-10-16 标签: scheme racket

问题描述

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

使用的术语:

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)))))

729