それは今、私のすべてのクラスで起こっているようです - 私は忠実にプラグを差し込んでいますが、割り当てられた授業時間、教授が私の仕事をチェックし、私が会話するクラスメートの「プレッシャー」がなければ、私はいつもオンラインコースに約1か月半苦労しているようです。しかし、恐れることはありません、私は第6週を乗り越えました、そして私はいつものように徹底的な要約をあなたに持ってきます!体系的なプログラム設計の紹介の第6週は、相互参照の考え方を取り上げます...さあ始めます!
レッスン1:より多くのヘルパーと相互ヘルパー
このレッスンの冒頭で、HtDFレシピの目的は、一見克服できないと思われる大きな問題を、より小さく、より管理しやすい問題に分解することであることを思い出します。このリマインダーは、今週は問題だけでなく、データ型や関数も分解する方法を説明するため、後でより理にかなっています。コースのインストラクターは、これまでのコースでは、常にデータ型と関数を完全な状態に保っていましたが、6週目には、すべての問題を分割したのと同様に、それらを分割する方法を学ぶと説明しています。また、独自の統合ヘルパーを備えた新しい種類の任意のサイズのデータを学習することも通知されています。
レッスン 2: その他のヘルパー – 関数の構成
このレッスンは、いくつかのレッスンにまたがる大規模な練習問題から始まります - そのため、練習問題のすべてのステップを詳しく説明することは少し冗長で面白くないように思われるため、ここでは私のメモは少しまばらです。😉

レッスン 1 で説明した、関数を複数の部分に分割するという概念に関しては、これは完璧な例です。問題を小さな内部問題に分解すると、これは HtDF で関数構成問題 (消費されるデータに対して 2 つの異なる操作がある場合) として知られているものです。どうやら、これは信じられないほど簡単に達成できるようです、なぜなら、ご想像のとおり、そのためのテンプレートがあるからです!RacketにはFunction Composition Templateがあり、レッスン2ではその使用方法を順を追って説明します。簡単な例を挙げます: (define (arrange-images loi) (layout-images (sort-images loi)))
上記のように、1つの定義には2つの関数が組み込まれています。定義を書いた後、いつものように、何も忘れないようにウィッシュリストのエントリを書くように指示されます。J
レッスン 3 : イメージの一覧のレイアウト
このレッスンでは、前のレッスンの例を続けます。このレッスンで復習する最も重要なことは、関数を記述した後に MATCHING check-expects が合格することを確認することです。注: 不完全な関数からのチェックが失敗したと予想される場合。
レッスン 4: その他のヘルパー – リストを操作する
繰り返しになりますが、このレッスンからの簡単で短い豆知識を1つ紹介します。
関数をコーディングする場合、リストを操作する必要があるときは、新しいヘルパー関数を作成する必要があります。
はい、レッスン4はこれで終わりです!
レッスン5:より多くのヘルパー - ドメイン知識のシフト
このレッスンには、非常に興味深い焦点があります - Racket でのプログラミングの真っ只中に知識領域をシフトするには、ヘルパー関数を作成する必要があります。知ってる、何だって?!「画像の並べ替えから画像のサイズの比較に変更する場合、これはドメイン知識のシフトです」と試してみましょう。つまり、本質的には、リスト内のアイテムで何か違うことをしているとき、新しい関数を作るのです。確かに、これはこのコースについて私が最も好きではない点の1つです、なぜならそれはたくさんの余分なコードをもたらすと感じているからです、それはもっと...compact?、プログラミングのロジックを分解し、初心者にとって簡単にすることを理解しています。(さっき言ったっけ?それは私がもう初心者ではないということですか?おやおや、そうではないことを願っています!ハハ。
追記:
テストのためにアイテムを繰り返し使用する場合は、それを定数にしてください!より簡単で、間違いを避けるのに役立ちます。
レッスン6:その他のヘルパー – まとめ
理論的には、これがヘルパーの魔法が起こるところです。最後のヘルパー関数を書いてコードを実行すると、元の関数はヘルパーが書かれるのを待っていただけなので、すべてのテストは魔法のように成功するはずです。
No?
それなら、まずテストに間違いがないか確認する必要があります、なぜなら、単にタイプミスがあるかもしれないからです。それが問題でない場合は、関数をデバッグする必要があります。
また!第6週の「前半」が終わったので、ちょっとしたまとめがありました。
- 今週学んだ新しいヘルパールールをすべて覚えておいてください!後で必要になります。
- Macro Notionを利用することを恐れないでください–ヘルパールールを使用して主な機能から作業を分割し、生活を楽にします!!
Lesson 7: List Abbreviations
I.愛しています。これ。レッスン。
真面目な話、これまでのRacketでのリスト作成は忌まわしいものでした!このレッスンでは、Dr. Racketの言語定義を「Basic Student Language」から「Basic Student Language with List Abbreviations」に移動するように指示されます。感謝する。仁徳。
これがプログラミングに関して意味することは、リストを書くとき、短所はもう必要ないということです!!これでリストが意味をなすようになります!!リストを書き込むとき、次のように構成できるようになりました:(list "a" "b" "c")。スコア!
ただし、それでも短所を*使用*でき、場合によっては、その方が理にかなっていることに注意することが重要です。たとえば、リストに追加する場合でも、次のように言いたいでしょう。
(define L1 (list “b” “c”))
(cons “a” L1)
(リスト「a」「b」「c」)。
この理由は、appendを使用しようとすると、2つのLISTSを入力する必要があり、これにより、両方の要素を含む1つのリストが生成されます。
Lesson 8: Mutually Recursive Data
相互再帰的データは、Racket では、型コメントに 2 サイクルを持つデータとして定義されます。この型は、すべての要素にサブ要素を含めることができるため、任意のアリティツリーと呼ばれます。この任意の品質は、要素が幅と高さにまたがる両方の要素で任意である可能性があることを意味します。以下は、私が話していることの一例です。

Racketでは、任意のアリティツリーを構築するときに、....リスト!(衝撃的でしょう?
たとえば、要素の記述からListOfElement(サイクル)に移行することは相互参照であり、「任意の」サイクルとして理解できます。ですから、参照サイクルを経て、矢印が参照サイクルが始まった場所に戻るとき、これは「相互参照」として知られています。
Lesson 9: Templating Mutual Recursion
ここで1つの大きなヒント、それだけです!
プログラムを記述するときは、相互に再帰的なデータ型のテンプレートを一緒に記述します。なぜでしょうか。その方が簡単です!シンプルでシンプルです。J
レッスン 10: 相互再帰データに対する関数 – パート 1
相互に反するデータを操作する2+関数がある場合、それらを一緒に書くだけでなく、同じ例、署名、および目的ですぐにすべてを書き込む必要があります。
次に例を示します。
(define (sum-data—element e) 0)
(define (sum-data—loe loe) 0)
これをやっているとき...基本ケースの例を忘れず、相互再帰的および自己参照的な呼び出しのすべてをすぐに名前を変更することを忘れないでください。これらのアイテムは両方とも、後で頭痛や心痛を*トン*節約します。約束。
又。。。相変わらず。。。自然な再帰を信頼することを忘れないでください。
レッスン 11: 相互再帰データに対する関数 – パート 2
Two big takeaways here:
- 基本ケースは、サイクルストップを参照する場所です。(これはとても心に響くと思いました、今までこんな風に考えたことはなかったのですが、本当に本当です!
- 2つの関数を持つ命名規則に注意してください。明確にし、整理整頓してください。
レッスン 12: バックトラッキング検索
ここでは、任意のアリティツリーを使用した週の最後の関数を1つ紹介します。バックトラッキング検索!
あれは、何ですか。これは、特定の値/名前を持つ要素をツリーで検索するときです。ここで覚えておくべきことは、木の葉は上記の葉の後に検索されるため、親の「中」で見つかることです。ここでバックトラッキング検索が役立つのは、ツリーの枝の終わりに到達し、探している要素(「失敗する葉」と呼ばれる)が見つからない場合、別の枝を下るためにツリーをバックアップアップで横断する必要があるため、ジャンプすることはできません。これは、枝や葉がなくなるまで、ツリー全体のナビゲーションを通じて繰り返されます。
Week 6 Summary
今週はあちこちで、先ほど述べたように、単純に乗り越えるのが難しい週でした。しかし、全体的にはコンセプトは間違いなく管理可能だと思いますし、最後の2週間の授業が楽しみです。幸運を祈って下さい!!
ご質問/ご意見
私のブログにコメントするか、Twitter @DokiDaraで私を見つけてください。