また1年振りの更新となりかけました。

Andres Raba氏により2011年から開発が続けられている、非公式PDF版SICPを全訳しました。

ファイル 恒例のgithubです。 https://github.com/minghai/sicp-pdf jsicp.pdfが日本語版の本体です。

ejsicp.pdfはデバッグ用の日本語・英語併記となります。 ライセンスはCC BY-NC-SA 3.0です。商業使用は認められないことにご注意下さい。





SICPの難点 SICPは新入生向けの教科書です。内容はとても簡単な所からスタートします。ところが難点としてSICPの内容は高校生までの数学と物理の電子回路の内容を"良く"理解していることを前提としています。

ぶっちゃけてしまえば、課題として出てくる数学や電子回路の話が結構難しいのです。

例えば微分、積分、素数、剰余、確率、極限、級数、行列の理解が必要となります。

ネットで検索すると結構SICPを始めて2章までに脱落してしまう人がいるように思います。 しかし、どうか諦めないで下さい。色々なレビューに書かれていますが、本当のお楽しみは3章以降だと思います。数学的な内容は意地でも頑張って理解して下さい。数学ガール等を先に読んでおくと内容の理解が進むかと思います。私は(株)ワークスアプリケーションズ様が主催して下さった「プログラマのための数学」勉強会の内容がSICPにて展開される数値解析の内容とほぼ重なりとても参考になりました。 http://nineties.github.io/math-seminar/

http://www.youtube.com/playlist?list=PLzJWjr7AvxH0YYpi2uAH_QHLaSJQ5fZrR

SICPの難点として、課題が非常に多い点も挙げられます。これらの課題は内容の理解にとても重要なため、全て行うことがお勧めなのですが、量が半端ではありません。そのため全てを行うことを自分に課してしまうとあまりに負荷が高くてやってられなくなります。どうせ後半にはオープンな課題として、これが答えられたら博士課程の価値がある等といった課題も出てきます。ですので、気楽にほどほどに行ってください。 ちなみに、検索すると世界中でSICPを勉強している人達の回答が見られますが、5章辺りになると皆、課題をやっていません :-) 最後に、SICPの重要なテーマに抽象化が存在するのですが、抽象化レベルの高い話は簡単に道に迷います。特に4章、5章ではプログラムが大きくなり、自分が何をやっているのか全くわからなくなります。しかも、最後の最後に至るまでプログラムが完成し、実行することがありません。これを克服するためにはさっさとSICPのサイトから完成したプログラムをダウンロードして、先に終わりを読んで実行してしまうことです。そしてプログラム全体を読みながら教科書を読むことで初めて全貌が掴めてくることでしょう。

SICPを読む前に Schemeの処理系を手に入れましょう。 MacとWindowsの方にはRacketがお勧めです。 http://racket-lang.org/ RacketはLisp処理系の一方言ですが、グラフィカルなIDEを持ち、複数の言語を使用することが可能で、その中にはSchemeやSICP専用の言語拡張が含まれます。特にSICP 2.2.4節で習うピクチャー言語は専用の処理系を必要とするので通常は実行することができませんが、Dr. RacketのSICP拡張を用いることで実際に実行することが可能になります。 http://www.neilvandyke.org/racket-sicp/ RacketとSICP拡張のインストール方法に関しては以下のサイトがスクリーンショットも豊富にまとめて下さっています。 http://www.applelife100.com/2013/04/02/programmin-environment-for-sicp/ Linuxを使用されている硬派な方にはMIT Schemeがお勧めです。教科書ではMITの実装と他の実装の違いが良く話題になりますので複数入れて比較してみるのも面白いでしょう。 http://www.gnu.org/software/mit-scheme/

どの選択を行っても、最初にデバッガの使用法について学んでおくことをお勧めします。

プログラミング入門者が最も最初に嵌るのが入力ミスであり、次にデバッグです。デバッガの使用法を知る人と知らない人とでは生産性に10倍以上の差がつきます。

非公式日本語版PDFについて 非公式日本語版PDFはAndres Raba氏による非公式PDF版の翻訳です。

https://github.com/sarabander/sicp-pdf 非公式PDF版には元となったLytha Ayth氏によるTexinfo版が存在します。

http://www.neilvandyke.org/sicp-texi/ 非公式Texinfo版はMITによるSICPのオンライン上での全文公開を用いて作成されました。

http://mitpress.mit.edu/sicp/ 元々、非公式PDF版は非公式Texinfo版に対してTeXの組版を挿入し、texi2pdfを行うことでPDF化するという戦略が取られていました。

しかし、残念なことにtexi2pdfが内部的に利用するpdfTeXは海外では主流なのですが、日本では独自にpTeXの開発が進んだために傍流でした。当然のごとく、texi2pdfでは日本語を表示することができませんでした。 その窮地を救って下さったのが以下のサイトでした。

http://moimoitei.blogspot.jp/2010/06/generate-pdf-with-bookmark-on.html この記事が提供して下さったtexinfo.texを用いることで、無事にtexi2pdfの代わりにtexi2dviとdvipdfmxを併用することで日本語を出力することが可能になりました。しかし、LaTeXではなく、直接TeXを使うことが大きな障害でした。またこの記事も2010年のため、ASCIIやNTTのpTeXの違い等がコードには含まれており、現状には合っていない感じを受けておりました。私自身はSICPの勉強はしたかったのですが、TeXに時間を必要以上に取られることはストレスに感じておりました。この時点では翻訳のみを完成させた後に、MathjaxでWebに逃げる予定でいました。 その後、大きな転機となったのが、Andres Raba氏によるXeLaTeXの採用です。Raba氏はPerlによる力技でTexinfoをLaTeXに変換し、改めてLaTeXでの組版へと舵を切ったのでした。XeLaTeXはこれもまだ日本では傍流であり、滅多には使用されていません。しかし、幸いなことに以下のサイトにてXeLaTeXにて日本語を使用するためのパッケージを開発して下さった人がいらしたのです。 http://zrbabbler.sp.land.to/zxjatype.html この2つの奇跡により、俄然とやる気がでてきました。実際には翻訳が完成してから、Raba氏提供によるPerlスクリプトにてLaTeX形式に変換し、日本語をきちんと表示するまでには語るも涙な苦労がとんでもなくあったのですが、割愛します。ただこの課程でtexinfoファイルとtexファイルの両方を同期させる苦労に耐えきれなくなったために現在、LaTeXファイルを直接変更しており、既にTexinfoファイルの内容は古いままになっております。現在においてinfoファイルをEmacsで閲覧したいという方は少ないと思いますが、もしご希望の方がいらしましたら御自身で反映してpatchを送ってくださるととても助かります。よろしくお願いいたします。 最終的には日本では最もTeX環境が進んでいるのは意外にもWindows環境であったために、LinuxからWindows環境へと移行しています。xelatexの実行はTeXWorksから行うことができたためとても捗りました。 非公式日本語PDF版ビルド環境を構築するためにはWindowsにW32TeXをインストールして下さい。あべのり様の作成して下さったTeXインストーラを使えば簡単に可能です。 http://www.math.sci.hokudai.ac.jp/~abenori/soft/abtexinst.html 次にIPAフォントをインストールして下さい。

http://ipafont.ipa.go.jp/ フォントをダウンロードした後にフォントファイルを開くとインストールボタンが表示されますので、それを押せばインストールが完了します。明朝とゴシックの両方を必ずインストールして下さい。 後はTeXWorksでtexファイルを開いて黄緑色の再生ボタンを押せば勝手にコンパイルしてPDFを表示してくれます。 なお、この時にstyファイルが無いというエラーが最初は大量に出ると思いますが、どんなスタイルファイルが無いのかメモしてませんでした。すみませんが、検索して適当にインストールして下さい。





翻訳について 最初に、ど素人の翻訳なのであまり期待はしないで下さい。修正は大歓迎ですのでpullリクエストを下さい。 SICPの英語の大きな特徴は長文です。1つの文が5行や7行当たり前です。このことは教養の高い英語では当たり前のようです。しかし、これは翻訳においては問題になります。日本語と英語の語順の違いから、長い英語を逐語訳すると読めたものじゃなくなります。特に英語では頭から流れでどんどんと代名詞に置き換えられていくため、日本語にする場合に英語は終わりから訳すのだとかいうローカルルールを適用すると見事に破綻する場合があります。このため、原文では1文で書かれている長文をぶった切って短い文の集合にする場合が多くなりました。ただし、その分、原文の順をできるだけ守り、著者の意図を重視した流れに訳したつもりです。 SICPは新入生向けの教科書であり、入門書です。ですから、とにかく優しく訳したいと願いました。本文は全て「です、ます」に訳してあります。これは通常の教科書では珍しいかと思いましたが、少しでも読者の精神的な負担を減らしたいと考えました。 専門用語については可能な限り、検索しまくって正しいと思われる用語を適用しました。しかし、私に学が無い分、おかしな訳も混じっているかもしれません。ご指摘をお待ちしております。 最後に、法的問題を回避するために、私は和田先生が公開して下さった「公式な」翻訳を読んでおりません。そのため訳に違いがあるかと思います。その場合には、当たり前ですが、和田先生のほうを信用して下さい。日本を代表する先生と私のようなど素人では最初から勝負になりません。:-) そもそも、2013年8月にピアソン桐原が撤退し、SICPが無くなると聞いたときにこれを訳せば喜ばれるのではないかと始めました。まさか後から和田先生が公式訳を公開するとは全く想像していませんでした。一時は本当に公開を止めようかと悩んでいたのですが明示的にオープンなライセンスで公開することには意義があるのではないかと考えました。ただ、何かあったらあっという間に消える程度の存在なのは確かです。 翻訳にも著作権が存在します。そのため、和田先生の公式訳を引っ張ってきて、こちらの非公式訳に入れるような修正は行わないで下さい。何卒、よろしくお願いいたします。