2012-11-11 9 views
0

我需要了解我怎么能访问这是考虑到另一个函数作为输入函数的输入。访问到的输入在高阶程序方案

例如;我有一个叫做f的函数,它简单的做到了(define f (lambda (x) (if (null? x) #t (car x))))这个。我需要编写一个函数,它将此f作为输入并返回另一个函数,以便函数f作为其输入函数定义函数(twoback f)

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

G(X)= #T如果x是空列表或长度的列表1.

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

该函数将被称为像这样:((twoback f3) (list #t #f #t #f))

所以其实我的问题是:我如何可以访问T中的函数调用给出的列表他的功能,我要写(双功能)?因为我需要检查它是否为空。

回答

2

简短的回答,通过讨好的x参数。事情是这样的:

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

以上将定义一个名为twoback接收f作为参数,并依次将返回接收x作为参数的新程序的过程。本次返回程序是一个叫g的问题,从中你可以访问两个fx,你通常会做。

现在刚刚完成...部分与预期输出。

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

请记住,这是可能的功课,它不赞成给在这种情况下,直接的答案,你是不是从他的部分 –

+0

你说得对提供的解决方案,以他的工作没有努力帮助OP。对不起,我是新来的堆栈溢出... –

+0

感谢您的代码,但是,@Oscarlopez是正确的。 –