0

特定の順序を持​​つ一連の行列を保持するスキームにストリームが必要です。

このストリームのストリームカーは行列 [1 6 0 3] になります。つまり、行 1 列 1 は 1、行 1 列 2 は 6、行 2 列 1 は 0、行 2 列 2 は 3 です。各行列は技術的にはリストですが、表現 (コンストラクターとセレクター) があります。 2x2 マトリックス。したがって、これは 2x2 行列のストリームになります。

これで、ストリームの次のアイテムは [2 10 0 5] になります。ここでのパターンは、次のストリームの行列が次のように増加することです: [k (4k+2) 0 (2k+1)] ここで、k は k 番目の行列です。

これらをどのように保管したいかという考えがあります。例として、次のようにして連続した 1 のストリームを取得できることを知っています。

(define ones (cons-stream 1 ones))

および整数の連続ストリーム:

(define integers (cons-stream 1 (add-streams ones integers)))

したがって、上記の形式の行列の連続ストリームが必要です。つまり、最初のもの (カーストリーム) は、[1 6 0 3] で表される行列、[2 10 0 5] で表される行列、[3 14 0 7] で表される行列になります。

だから、私はそれが次のようになることを知っています:

(define start-matrix '(1 6 0 3))

(define init-stream (cons-stream start-matrix 
                             (add-streams ___________
                                          init-stream)))

下線は「私が思う」が欠落している部分です。投稿を整理するために、この投稿から「ストリームの追加」手順を削除しました。

***編集: 「開始行列」は 1 4 0 2 ではなく 1 6 0 3 でなければならないことに気付きました。

しかし、k 番目の行列に 1 4 0 2 を追加する方法が必要です。

4

1 に答える 1

1

まず、行列の加算を行うには、独自のバージョンのadd-streamsを定義する必要があることに気付きましたか? (これはあなたが編集したものに含まれている可能性があることに気づきました)。

第二に、SICP の例とあなたのバージョンとの間に何が欠けているかわかりませんか? SICP の例では、一定の 1 のストリームを提供する関数があります。1 は、整数ストリームの各新しい要素に追加されるものです。ここで、 init-streamストリームの新しい各メンバーに追加したいものがあります。きっとあなたはそれが何であるかを理解できますか?つまり、それを何度も追加して k 回実行する場合... (何度も言及するので、それが何であるかを知っている必要があります)。したがって、欠けているのは、その 1 つの無限のストリームを配信する機能だけです。

第 3 に、SICP の例では、毎回 1 を追加するのではなく、 onesストリームから新しい要素を追加する理由がわかりましたか? (実証されている原則があります)。

第 4 に、 init-streamはこの関数の適切な名前ではない ことがわかりますか? init-streamは汎用関数を示しますが、非常に具体的なストリームを返すものを定義しています。SICP の命名例に従って、それが返すものに名前を付けてみませんか?

問題を解決するために、私の 3 番目と 4 番目の質問に答える必要はありません。あなたが要点を理解しているかどうか知りたいだけです。

于 2012-10-15T12:26:02.080 に答える