2017-07-25 54 views
1

我有家庭作業一個問題,如下:方案雙人所有列表值和寫映射函數

enter image description here

我的第一部分(double-list-elements)完整

(define (double-list-elements s) 
    (if (null? s) 
    '() 
    (cons (* 2 (car s)) 
     (double-list-elements (cdr s))))) 

但我真的絕對不知道如何繼續double-list-elements-one。任何指針將不勝感激。

接近,但沒有雪茄:

(define (double-list-elements s) 
    (if (null? s) 
     '() 
     (cons (* 2 (car s)) 
      (double-list-elements (cdr s))))) 

(define (custom-map proc lst) 
    (if (null? lst) 
     '() 
     (cons (proc lst) 
      (custom-map proc (cdr lst))))) 

(define (double-list-elements-one func s) 
    (custom-map double-list-elements s)) 

(double-list-elements-one double-list-elements '(1 2 3 4 5 6)) 

輸出= (list (list 2 4 6 8 10 12) (list 4 6 8 10 12) (list 6 8 10 12) (list 8 10 12) (list 10 12) (list 12))

我需要雙列表元素傳遞給雙列表元素 - 一個作爲參數以及列表。

回答

1

你只需要編寫自己的map,這是非常非常類似於您已經有了,只需通過改變一個過程參數的一部分,並調用它在正確的地方:

(define (mymap proc lst) 
    (if (null? lst) 
     '() 
     (cons <invoke proc on current element> 
      (mymap proc (cdr lst))))) 

(define (double-list-elements-one s) 
    (mymap <pass a proper lambda> s)) 

(double-list-elements-one '(1 2 3 4 5)) 
=> '(2 4 6 8 10) 
+0

但是這個問題特別說明我不能使用內置的地圖功能,而且我必須自己創建,這是我掛斷的地方。我對這種語言非常陌生。 –

+0

@Gabriel_W啊!我的錯。我用提示更新了我的答案:) –

+0

我很接近,但得到了一些時髦的結果。請參閱上述編輯。 –