f が数値関数で、n が正の整数の場合、f の n 回目の反復適用を形成できます。これは、x における値が f(f(...(f(x))) である関数として定義されます。 ..)))。たとえば、f が関数 x + 1 の場合、f を n 回繰り返し適用すると、関数 x + n になります。f が数値の 2 乗演算である場合、f を n 回繰り返して適用すると、その引数が 2^n 乗される関数になります。f と正の整数 n を計算する手続きを入力として受け取り、f の n 回目の繰り返し適用を計算する手続きを返す手続きを書きなさい。手順は次のように使用できるはずです。
((repeated square 2) 5) 625
これを使用して答えを簡単にすることができます:
(define (compose f g) (lambda (x) (f (g x))))
1678 次
2 に答える
2
(define (repeated f n)
(if (= n 1)
f
(compose f (repeated f (- n 1)))))
于 2009-05-05T10:59:00.807 に答える
1
この質問を削除して再質問しましたか?ここに以前の回答をコピーしています(ありがたいことに、私のブラウザはそれをキャッシュしていました):
まあ、あなたはおそらくこのようなものが欲しいですよね?
((repeated square 3) 5)
-> (square ((repeated square 2) 5))
-> (square (square ((repeated square 1) 5)))
-> (square (square (square ((repeated square 0) 5))))
-> (square (square (square (identity 5))))
(Scheme で ID が事前定義されているかどうかはわかりません。そうでない場合は、簡単に記述できます。)
現在、これは直接再現できません。これは、任意のもので繰り返される呼び出しの外側で魔法のようにコードを囲むことができないためです。しかし、compose を使用して書き直すと、これらの削減手順はどのように見えるでしょうか? 得られたステップのリストからパターンを見つけて、それを再現できますか?
于 2008-10-30T08:24:48.837 に答える