http://sicp.iijlab.net/ の問題の答えを載せています。
- DrRacketを利用しています。
- https://wizardbook.wordpress.com/ を参考にしつつ、実際に実行できるように全コードを載せています。
- 問題 2.87 以降について公開しています。過去分は気が向いたら公開します。
Download Racket https://download.racket-lang.org/
- ダウンロードして展開し、アプリケーションにコピーするだけ。
- DrRacket以外にも関係ないものがいくつかインストールされるのが気になるが。。
- 起動後は[言語]の設定はデフォルトのThe Racket Languageのままでいい。
- デフォルトのThe Racket Languageが
#lang
を利用してソースファイル内で実行する言語を指定するという意味になる模様。
- デフォルトのThe Racket Languageが
- ソースの先頭に以下を追加する。
#lang planet neil/sicp
- http://www.neilvandyke.org/racket/sicp/
- ステップ実行も出来て、実行時エラーもどこで失敗したかも分かり、とても使いやすい!
- まずデバッグ実行する。この状態でステップ実行が可能になる。
- ブレークポイントはデバッグ実行中にソースコードをマウスオーバーすると赤い点がでるので、そこを右クリックすればいい。
http://planet.racket-lang.org/package-source/neil/sicp.plt/1/18/main.rkt がソースファイル。ここを読むといろいろ分かる。
- 先頭に #lang r5rs と書かれているように、neil/sicp は r5rs ベース。
- 同じ名前で
define
は出来ない。再定義する場合はset!
を利用する。関数も再定義できる。
- 同じ名前で
- sicp/e_3_06.rkt at master · n3104/sicp に記載しているように
#%require
を用いることで racket/base などRacketの任意の関数を追加できる。 - sicp/e_4_55.rkt at master · n3104/sicp · GitHub に記載しているよう
include
を用いることでコードを外部ファイル化できる。- 読み込み対象である sicp/c_4_4.rkt at master · n3104/sicp の先頭の
#lang
はコメントアウトする必要があった。そのままにしておくとエラーになった。 - 12.10 File Inclusion が公式ドキュメント。
- 読み込み対象である sicp/c_4_4.rkt at master · n3104/sicp の先頭の
- sicp/e_4_55.rkt at master · n3104/sicp · GitHub に記載しているようにシンボルをケースセンシティブにしたい場合はシンボルの先頭に
#cs
を付与する必要がある。- 1.3 The Reader が公式ドキュメント。
- 13.4 Reading に記載のある
read-case-sensitive
関数でケースセンシティブに評価するかどうかを本来は指定可能だが、3 R5RS Module Languageに記載の通り(read-case-sensitive #f)
で初期化した上で変更できないようになっているので neil/sicp では個々のシンボルに#cs
を付与する必要がある。