プログラミング入門 第 13 回レポート課題

プログラミング入門
第 13 回 レ ポ ー ト 課 題
提出方法:Moodle 上の「2014 前-プログラミング入門-二宮」にアクセスし、第 13 回講義の問題 37
~39 に提出せよ。
締切り: 2014 年 7 月 25 日(金) 10:20
問題 37 𝑛𝑛番目のストリームの要素を𝑠𝑠𝑛𝑛 としたとき、
𝑠𝑠1 = 0
𝑠𝑠𝑛𝑛 = 𝑠𝑠𝑛𝑛−1 +
8
(4𝑛𝑛 − 7)(4𝑛𝑛 − 5)
となる無限ストリーム pi を作成せよ。例えば、次のような結果になれば良い。
> (stream->list pi 5)
(0.0 2.6666666666666665 2.895238095238095 2.976046176046176 3.017071817071817)
> (stream-ref pi 10)
3.091623806667838
> (stream-ref pi 1000)
3.141092653621038
> (stream-ref pi 1000000)
3.141592153589902
※このストリームは非常に遅いが𝜋𝜋に収束する。𝑠𝑠1を 0.0 とすれば、実数表示となって答えの確認が
容易になる。
(2 点)
1
問題 38
奇数列の無限ストリームを作ることを考える。補助関数の再帰呼び出しによる無限ストリ
ームで実現すると次のようになる。
(define (odds-gen x) (cons x (delay (odds-gen (+ x 2)))))
(define odds (odds-gen 1))
しかし、上の定義は長いし、odds-gen が必要であまり美しくない。そこで odds-gen のような補助関
数を用いずに integers から奇数列の無限ストリームを定義する方法について考えることにする。
stream-filter や stream-map 等を用いて integers から奇数列の無限ストリームを定義せよ。ones
を用いても構わない。
(2 点)
問題 39 自分自身を用いて定義する方法で奇数列の無限ストリームを定義せよ。stream-map や ones
を用いても構わない。
(2 点)
2