2012-03-21 60 views
1

如何編寫函數max-list-function,該函數使用函數列表,然後生成函數f,使得每x(f x)產生所有函數的最大值g在函數列表中?使用抽象列表函數遍歷方案中的函數列表

例如(max-list-function (lambda (n) (+ n 4)) (lambda (n) (- 15 n)))) 產生一個函數,使得(f 2)返回13點(f 10)返回14.

這是要與抽象列表函數(過濾器,foldr相似,地圖,...)沒有遞歸方法來實現。

回答

1

試試這個:

(define (max-list-function flist) 
    (lambda (n) 
    (foldr max -inf.0 
      (map (lambda (f) (f n)) 
       flist)))) 

使用方法如下:

(define f (max-list-function 
      (list (lambda (n) (+ n 4)) (lambda (n) (- 15 n))))) 

(f 2) 
> 13.0 

(f 10) 
> 14.0 
+0

很好的解決方案,但我認爲只是發佈完整的答案作業問題被認爲是有害的。 – gcbenison 2012-03-21 18:06:44