2010年1月2日土曜日

DrScheme (Racket) で Emacs のキーバインディング

1. 継続を理解するために Scheme を学びたい

関数型言語を学んでいると、どこかで「継続」や「マクロ」という概念に出くわす。

継続といえば Scheme 。 Scheme – Wikipedia によると、

SchemeはMITコンピュータ科学・人工知能研究所の研究者だったガイ・スティールとジェラルド・ジェイ・サスマンによって、1975年ごろから開発・公開が始められた。もともとの開発の動機は、継続末尾再帰といったプログラミングのコンセプトを使って、彼らが研究していた並行プログラミングにおける制御構造の理論を検証するためだったという。

Haskell では Continuation モナド で継続による計算を実現している。これを理解するには、Scheme の継続を予め理解しておく必要がある。

Lisp 系の言語はこれまで学んだことがない。SICP をいつか読みたいと思いつつ、ずっと放置していた。

SICP を学ぶ前に、以下のサイトで Scheme を勉強することにした。

 

2. DrScheme (Racket) で Scheme を試す

もうひとつの Scheme 入門 では、Scheme の処理系として

が紹介されている。

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 のチェックをはずす。

testtest.png

ただし、メタキーの入力は 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

  • M-C-b : move backward one S-expression

  • 上記のようにメタキーの入力をするには、Escape キーを押せばいいので、

    1. Escape キーを押す。
    2. C-f または C-b を押す。

    という操作をする。

     

    Escape キーの代替

    追記(2012/08/03): Escape キーは、ホームポジションから遠い位置にある。 キー入力が面倒な場合、AutoHotkey で代替すると良い。

    これにより、

    1. Ctrl + [
    2. Ctrl + f

    の順にキーを入力すると M-C-f と同じ動作になる。 このとき、Ctrl キー押したまま [, f を入力すれば良い。押下したキーを離す必要はない。

     

    5. コードの補完