2011-05-20 32 views
1

我應該定義一個函數,它將函數列表和另一個列表作爲參數,並返回通過將所有函數按順序應用於列表元素而獲得的值列表。幫助創建Scheme映射 - 許多函數

我想出了下面,但我收到的錯誤:

+: expects type <number> as 1st argument, given: (1 2 3); other arguments were: 1 

,當我嘗試使用功能與樣品輸入,(map-many (list (lambda (x) (+ x 1)) (lambda (x) (* x x))) '(1 2 3))。任何建議,將不勝感激。

(define (map-many fun-list lst) 
    (if (null? lst) lst 
     (map ((car fun-list) lst) 
      (map-many (cdr fun-list) lst)))) 

回答

1

您將錯誤的功能傳遞給map。嘗試通過(car fun-list),而不是通過((car fun-list) lst)

0

你的措辭對我來說有點不清楚。你應該做下面的事情嗎?有兩個列表,其中一個過程(讓我們稱這個列表爲P),另一個帶有值(我們稱之爲列表V)。所以,你正在尋找然後找到一個列表,其中:

  • 列表-REF 0 =(P0 V0)
  • 列表-REF 1 =(P1(P0 V1))
  • 列表-REF 2 = (P2(P1(P0 V2))

(define (map-many procs vals) 
    (let ((applied (map (car procs) vals)) 
    (if (null? vals) 
     vals 
     (cons (car applied) (map-many (cdr procs) (cdr applied))))))) 
+0

這個函數應該像'(map(apply compose fun-list)lst)'一樣工作。 – 2011-05-20 16:17:25

2
(define (map-many fun-list lst) 
    (if (null? fun-list) lst 
     (map (car fun-list) 
      (map-many (cdr fun-list) lst)))) 

你的錯誤是:

  1. 你完成你的遞歸(null? lst)而不是(null? fun-list)
  2. 該函數的其餘部分是不合邏輯的。
+0

+1對'(null?lst)'和'(null?fun-list)'東西的好評! – 2011-05-20 16:52:53