2017-03-19 6 views
0

それぞれを1,2,3というように入力を増やす 'n'関数のリストを返す関数を作成しようとしています。 .. nである。入力に基づいて 'n'関数のリストを返す関数を書く方法

私はDrRacketを使ってこれを試しています。期待される成果のサンプル:

> (map (lambda (f) (f 20)) (func-list 5)) 
(21 22 23 24 25) 

私は静的な方法でこれを書き留めることができるよ:

> (define (func-list num) 
> (list (lambda (x) (+ x 1)) (lambda (x) (+ x 2)) (lambda (x) (+ x 3)) (lambda (x) (+ x 4)) (lambda (x) (+ x 5))) 

いくつかの制限が実装に配置されていること、[編集]また

  1. のみ '短所' および算術演算を使用することができる
  2. func-listは入力として1つのパラメータのみを取ります(この場合、返される関数の数はnです)

誰かが私を助けることができれば素晴らしいと思います。前もって感謝します。代わりに、明示的にリストを書き出すの

答えて

0

、より良いアプローチは再帰的になり、次のように、任意のnのためにそれを構築する:たとえば

(define (func-list n) 
    (define (func-lst a n) 
    (if (> a n) 
     empty 
     (cons (lambda (x) (+ x a)) 
       (func-lst (add1 a) n)))) 
    (func-lst 1 n)) 

を:

> (map (lambda (f) (f 20)) (func-list 0)) 
'() 
> (map (lambda (f) (f 20)) (func-list 5)) 
'(21 22 23 24 25) 
+0

をいただき、ありがとうございますあなたの答え。私は私の質問の一部として言及することを忘れてここにいくつかの制限があります。 1. func-listは入力として1つだけ引数を取るべきです(この場合は 'n'を返さなければならない関数の数) –

+0

上記の 'func-list'を編集して、それは以前のバージョンのラッパーです)。 '(func-list n)'はあなたの両方の制限を満足するはずです。 – assefamaru

+0

どうもありがとう。 –

関連する問題