1. 継続を理解するために Scheme を学びたい
関数型言語を学んでいると、どこかで「継続」や「マクロ」という概念に出くわす。
継続といえば Scheme 。 Scheme – Wikipedia によると、
SchemeはMITコンピュータ科学・人工知能研究所の研究者だったガイ・スティールとジェラルド・ジェイ・サスマンによって、1975年ごろから開発・公開が始められた。もともとの開発の動機は、継続や末尾再帰といったプログラミングのコンセプトを使って、彼らが研究していた並行プログラミングにおける制御構造の理論を検証するためだったという。
Haskell では Continuation モナド で継続による計算を実現している。これを理解するには、Scheme の継続を予め理解しておく必要がある。
Lisp 系の言語はこれまで学んだことがない。SICP をいつか読みたいと思いつつ、ずっと放置していた。
SICP を学ぶ前に、以下のサイトで Scheme を勉強することにした。
2. DrScheme (Racket) で Scheme を試す
もうひとつの Scheme 入門 では、Scheme の処理系として
- PLT Scheme (現在は Racket)
が紹介されている。
Racket – Wikipedia によると、
Racket では関数型のコア言語,に加え、以下のような幅広い種類の構造を自由に統合させている。
- mixin クラスシステム。
- Standard MLのように洗練されて表現力豊かなコンポーネント(モジュール)システム。
- 高階言語杳としては初めてのコントラクトシステム。[4]
- メタプログラミングのためのパワフルなマクロシステムをもつ。
- 実用的なシステムとして、最初に部分継続を実装した。
Scheme 入門 1. Scheme 処理系のインストール によると、
DrScheme を利用する場合は MzScheme も同時にインストールされます。そのため、MzScheme を単独でインストールする必要はありません。実は、MzScheme は PLT-Scheme という処理系のエンジン部分で、DrScheme は PLT-Scheme のフロントエンドです
お気軽に Scheme に触れるには DrScheme を使うのが良い。
他のエディタから利用するには、以下を参照。
3. Emacs のキーバインディングを利用する
DrScheme のデフォルトのキー操作は使いにくい。 (+_+) Emacs のキーバインディングにするには設定を変更する。
3.3 Keyboard Shortcuts によると、
If you are most familiar with Emacs-style key bindings (especially on windows or some linux installations where the control key is, by default, for the menu shortcuts), you should uncheck the Enable keybindings in menus preference. Many of the keybindings below are inspired by Emacs.
メニューより、「Edit > Preferences… > Editing > General」の Enable keybindings in menus のチェックをはずす。
ただし、メタキーの入力は Escape キーを利用する。
On Windows and Mac OS X, Meta is only available through the Escape key.
(同上より)
3. コードの実行と編集
DrScheme (Racket) では、
- F5 でコードの実行
- F6 でエディタに戻る
4. 移動
括弧単位でカーソルを移動するには、3.3 Keyboard Shortcuts によると、
M-C-f : move forward one S-expression
上記のようにメタキーの入力をするには、Escape キーを押せばいいので、
- Escape キーを押す。
- C-f または C-b を押す。
という操作をする。
Escape キーの代替
追記(2012/08/03): Escape キーは、ホームポジションから遠い位置にある。 キー入力が面倒な場合、AutoHotkey で代替すると良い。
これにより、
- Ctrl + [
- Ctrl + f
の順にキーを入力すると M-C-f と同じ動作になる。 このとき、Ctrl キー押したまま [, f を入力すれば良い。押下したキーを離す必要はない。
5. コードの補完
- cf. DrRacket でコードの補完
0コメント:
コメントを投稿