在方案中访问高阶程序中的输入

时间:2012-11-11 16:54:56

标签: lisp scheme procedure mit-scheme

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

例如;我有一个名为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函数)中访问函数调用给出的列表?因为我需要检查它是否为空。

2 个答案:

答案 0 :(得分:2)

简短回答,通过讨论x参数。像这样:

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

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

现在只需使用预期输出完成...部分。

答案 1 :(得分: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))))