2014-12-01 46 views
-1

我創建了一個函數,它將一個列表作爲輸入並返回一個列表或一個原子。我想將這個函數應用到深層列表中,從內部列表開始,然後在外部列表上運行該函數後結束。深層列表方案的遞歸

有人可以給我這個方向嗎?

樣本輸入將是(a b(c(d e)))z)函數首先應該在(d e)上計算結果f f。那麼函數應該在(c f)上計算結果爲g,然後類似地在(a b g z)上產生h的輸出。

一個實例函數可以是:

(define sum 
(lambda (l) 
    (if (not (pair? l)) 
    0 
    (+ (car l) (sum (cdr l)))))) 

當輸入將是(1 2(3 4)5)> 15

+2

請張貼到目前爲止你寫的代碼,用樣品投入和預期產出,正好勾勒哪來的問題你的實現 – 2014-12-01 16:08:21

+0

樣本輸入將是(ab(c(de))))函數首先應該在(de)上計算結果f。那麼函數應該在(c f)上計算結果爲g,然後類似地在(a b g)上產生h的輸出。我無法粘貼我的代碼,因爲它是作業。 – Adam 2014-12-01 16:48:55

+0

@ user234234查看http://stackoverflow.com/q/5699899/23567,它解決了類似的問題。沒有任何代碼,人們更不願意幫忙。 – soegaard 2014-12-01 17:13:11

回答

0

假設你的示例轉換,表示爲方案程序:

(define (transform lst) 
    (case lst 
    (((d e)) 'f) 
    (((c f)) 'g) 
    (((a b g z)) 'h) 
    (else (error (~a "wot? " lst))))) 

那麼你正在尋找似乎

(define (f lst) 
    (transform 
    (map (lambda (e) 
      (if (list? e) (f e) e)) 
     lst))) 

測試:

> (f '(a b (c (d e)) z)) 
'h 
0

下面是一個例子:

(define product 
    (lambda (l) 
    (cond 
     [(number? l) l] 
     [(pair? l) (* (product (car l)) (product (cdr l)))] 
     [else  1]))) 

> (product '(1 2 (3 4) 5)) 
120 
+0

非常感謝您的幫助,但是我正在尋找映射已定義的功能,例如總和或其他功能到深表。 – Adam 2014-12-01 21:19:56