0

我需要了解如何访问作为输入提供给另一个函数的函数的输入。

例如; 我有一个名为 f 的函数,它只是执行(define f (lambda (x) (if (null? x) #t (car x))))此操作。我需要编写一个函数,以这个 f 作为输入并返回另一个函数,这样,

- 定义一个(twoback f)以函数 f 作为其输入的函数。

- 作为它的输出,它应该返回一个具有以下行为的新函数 g:

g(x) = #t 如果 x 是空列表或长度为 1 的列表。

 = f(y) where y=(cdr x) otherwise.

该函数将像这样调用:((twoback f3) (list #t #f #t #f))

所以实际上我的问题是:如何访问我要编写的函数中的函数调用给出的列表(twoback 函数)?因为我需要检查它是否为空。

4

2 回答 2

2

简短的回答,通过柯里化x参数。像这样的东西:

(define twoback
  (lambda (f)
    (lambda (x)
      ...)))     ; fill-in with the logic requested

上面将定义一个twoback接收f作为参数的过程调用,然后它将返回一个接收x作为参数的新过程。返回的第二个过程是g问题中调用的过程,您可以从中访问这两个过程f,并且x可以像往常一样访问。

现在只需完成...具有预期输出的部分。

于 2012-11-11T17:28:02.010 回答
0

我想这就是你的意思:

(define (twoback f)
 (lambda (x)
  (if
   (or (null? x) (null? (cdr x)))
   #t
   (f (cdr x)))))
(define f (lambda (x) (if (null? x) #t (car x))))
于 2012-11-11T17:20:06.300 回答