0

大家好,对于学校,我必须创建一个函数,其中 lambda 用作参数

像这样:(string (lambda ...) 5 40)我们必须填写点

这是我们必须重新发明的函数,常规字符串版本

(define (string decoration n r)            >string decoration is a function that creates a string with either fish or pumpkins hanging on the string
  (define (decorations k)                  >decorations is the recursive function which hangs all the decorations together
    (if (= k 1)
        (decoration r 10)                  > here decoration is to be replaced with either a pumpkin or a fish as stated in the parameters
        (ht-append (decoration r 10)       > ht-append is a function that appends 2 figures Horizontally at the Top
                   (decorations (- k 1)))))
  (hang-by-thread (decorations n)))        > hang by thread is a function that hangs all the decorations at a string

所有的名字都应该是不言自明的,这个函数需要一个装饰物,一条鱼或一个南瓜,然后用一根线把它挂起来。但是鱼有 3 个参数,南瓜有 2 个,这导致了错误。所以在之前的练习中,我们必须做一个额外的定义,叫做 fish-square,它只使用 2 个参数来制作一条鱼。现在我们必须使用 lambda 来实现同样的平方鱼。任何帮助是极大的赞赏

(define (fish-square wh l)                        > this is the fish square functio which makes a fish but with 2 times the same parameter so it looks like a square
  (vc-append (filled-rectangle 2 l) (fish wh wh)))   > the l is the length of the string that attaches the fish to the string at the top

鱼函数只是 (fish xy) x 使它更长, y 使它更高。南瓜函数只是(南瓜 xy)同样的故事

所以我的问题是,如何重写给定的代码,但使用 lambda 作为参数。我会上传一张图片,但我的声誉不够高:s

4

2 回答 2

2

string过程已经接收一个过程作为参数(您不必重写它!),decoration可以是任何用于装饰的双参数函数。现在,当您调用它时,您可以传递一个命名过程,例如:

(define (decoration r n)
  <body>)

(string decoration
        5
        40)

...或者同样容易,您可以通过与 a 内联的相同过程lambda,如果我理解正确,这就是您应该做的:

(string (lambda (r n)
          <body>)
        5
        40)

只需替换<body>为您要使用的装饰的实际主体即可。换句话说:你期望做的改变是你在调用时将参数传递给函数的方式,但你不期望改变函数本身。

于 2013-10-30T19:19:17.780 回答
0

想象一下你有这个程序+。它可以是任何真的。它需要几个参数,但您需要一个不同的过程,该过程需要一个并将其添加到已经恒定的值 3。

因此,您想传递+应该添加 3 的额外信息。

这种程序的完整定义是

(define (add3 n)
   (+ 3 n))

这是完整定义的缩写形式

(define add3 
   (lambda (n)
      (+ 3 n)))

现在,当传递一个过程时,3+您实际上可以只传递它的定义。这两个做同样的事情:

(do-computation add3 data)

(do-computation (lambda (n) (+ 3 n)) data)
于 2013-10-30T22:28:08.990 回答