2017-07-25 3 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に二重リストの要素を渡す必要があります。

答えて

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

私は近くですが、ファンキーな結果を得ています。上記の編集を参照してください。 –

関連する問題