Kahua
- 本家
- KahuaSeminar (臨時)
- 実験室
News
- ド素人とKahua (2007-07-04 13:58:34(+0900))
- Kahua Wish List (2006-09-28 06:48:12(+0900))
- Kahua Bug (2006-11-22 07:51:39(+0900))
- 日誌 (2007-07-04 14:00:20(+0900))
- Enjoy Gauche (2007-07-04 13:59:46(+0900))
Site Info
Kahua開発日記
Enjoy Gauche
4. Emacs のすすめ
Scheme のプログラム編集を補助してくれるモードのあるエディタで代表的なのは Emacs です.Emacs はそれ自身が Emacs-Lisp という Lisp のインタープリタに なっているくらいですから,Scheme のプログラミングをするときには最適です.
Gauche でプログラミングをするときには,
- Editor で Gauche のプログラムコードを作成
- Gauche の関数の使い方を調査
- Gauche のインタープリタの対話モードで動作確認
を繰り返すことになります.これを支援してくれる Emacs のモードがありますので それを使わない手はありません。最近の Emacs 21 では、cmuscheme.el が標準で インストールされているはずですので次のようなおまじないをします。
4.1. おまじない
.emacs に以下の設定をおまじないとして入れておきましょう.
(setq scheme-program-name "gosh") (require 'cmuscheme) (defun scheme-other-window () "Run scheme on other window" (interactive) (switch-to-buffer-other-window (get-buffer-create "*scheme*")) (run-scheme scheme-program-name)) (define-key global-map "?C-cS" 'scheme-other-window)
こうしておいて、なにか Scheme のプログラムファイルを作成してみましょう。 コマンドプロンプトから、
$ emacs fact.scm
と入力して、fact.scm という名前でファイルを新規に編集してみましょう。 Emacs のステータスバーのモードの表示のとろに Scheme の表示が出ましたか? これが出ていれば、Scheme モードになっていますので、便利な機能が使えます。
ここでは fact という関数を定義してみます。
(define (fact n_
と入力してから(ここでは、「_」カーソルの位置を表わしていいます、これは 入力しません)、閉じ括弧(「コッカ」と呼びます)を入力してみましょう。 一瞬だけ、対応する開き括弧(単に「カッコ」というとこちらを指します)の位置に カーソルが移動しましたね。Emacs の Scheme モードのこの機能はたいへん便利です。 この機能のないエディタで Scheme のプログラミングをするのは辛いです。
(define (fact n)_
さらに、改行キーを押してみましょう。改行後、tabキーを押すか、C-i を 押してみましょう。そうすると、カーソルは
(define (fact n) _
のようにインデントされて、前の行の最初の「e」の真下に来ます。 さらに続けて、入力して fact の定義を完成しましょう。
(define (fact n)
(if (= n 0)
1
(* n (fact (- n 1)))))_
改行し、tab を押すたびに適切なインデント位置にカーソルが来るのが わかるでしょう。これも Emacs の scheme モードの便利なところです。 定義の最後に「コッカ」がたくさんならびましたが、入力の度に、対応する 「カッコ」にカーソルが飛ぶので、それを見ながら、最後に define の前の 「カッコ」にカーソルが飛んだらおしまいです。
関数がひとつだけとはいえ、これもりっぱなプログラムです。大事なプログラム を失うことのないように、まずは、C-xC-s でセーブしましょう。
4.2. カーソル移動
さて、.emacs のおまじないはどのように効くのでしょう。 まず、カーソルの移動用の以下のような便利なキー操作が使えます。
| M-C Space | カーソルの次のS式をマーク |
| M-C-a | カーソルを含むトップレベルのS式の先頭へ移動 |
| M-C-e | カーソルを含むトップレベルのS式の末尾へ移動 |
| M-C-f | 次のS式へ移動 |
| M-C-b | 前のS式へ移動 |
| M-C-t | カーソルの前後のS式を交換 |
| M-C-d | 1レベル内側のS式へ移動 |
| M-C-u | 1レベル外側のS式へ移動 |
これらのキー操作はおぼえておくと便利です。
4.3. ファイルのロードおよびS式の評価
C-cS とタイプしてみましょう。Emacs の画面が2分割されて、Gauche の インタープリタのプロンプトが表示された(Emacsの)ウィンドウが表示されま したね。これで、インタープリタの準備ができました。
そこで、fact.scm のバッファへ戻って、C-cC-l とやってみましょう。 すると、ミニバッファに Load Scheme file: というプロンプトがあらわれて インタープリタにロードするファイルを尋ねられます。そのままリターンキーを 押すとインタープリタ側のバッファに #t が出ます。これで、インタープリタに 先程のプログラムが読みこまれました。試してみましょう。インタープリタに (fact 5) を評価させてみましょう。インタープリタ側にもどって、インタープリタ のプロンプト gosh> のあとに (fact 5) と書いてリターンキーを押してみましょう。
gosh> (fact 5) 120
のようになりましたか?
では再び、fact.scm バッファに戻って、さっきのプログラムの後に、
;; (fact 6) ;; (fact 10)
という2行を追加して下さい。そうしてから、(fact 6) の直後にカーソルを 置いて、C-xC-e を押してみてください。インタープリタ側(*scheme*バッファ) に 720 が表示されましたか?
次に (fact 10) の直後にカーソルを置いて同じことをやってみましょう。 *scheme* バッファに 362800 が表示されたでしょう。
Gauche のプログラミングでは、こんな風に Emacs を使いながら、自分の 定義した関数のうごきをチェックしながら進めます。