2012-11-11 8 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是正確的。 –