Emacsを使う
- - PR -
皆さんは、どんなエディタをお使いでしょうか。UNIX系のエディタとしては、vi(vim)派とEmacs派が大多数だと思います。Emacsは、Emacs Lisp処理系とエディタの基本機能をC言語で実装したベースのうえに、Emacs Lispで構築されたエディタということもありLispとは大変に相性が良いです。私も長年Emacsを利用しています。
Emacsは一般的なエディタ機能だけでも強力ですが、編集するプログラム言語ごとにその言語固有の編集機能をモードという形でサポートしています。
Scheme用にはSchemeモードがあり、通常.scmで終わるファイルを読み込んだ場合はSchemeモードになります。SchemeモードはEmacsインストールパッケージに含まれているので最初から使えます。
GaucheはSchemeの一実装ですので、Schemeモードだけでもプログラミングできますが、Gauche用にカスタマイズした方がより便利になります。
私は、あまりEmacsの設定ファイルにはこだわらない方なので、書籍「プログラミングGauche」に書かれた設定をそのまま使っています。この設定はKaretta|Gaucheプログラミング(立読み版)|Emacsの設定に公開されています。
設定はホームディレクトリーの.emacsファイルに書きます。この設定の一部を説明すると、
1. goshに渡す文字コードをUTF-8に設定
(setq process-coding-system-alist |
2. Emacsのバッファ内で動かすScheme処理系を/usr/local/bin/goshに設定
(setq scheme-program-name "/usr/local/bin/gosh -i") |
3. Schemeモードをより便利なcmuscheme.elで使用する設定
(autoload 'scheme-mode "cmuscheme" "Major mode for Scheme." t) |
4. ウィンドウを2つに分け、一方でgoshインタプリタを実行する関数(コマンド)を定義し、Ctrl+C、S(Ctrl+Cの次にS)で起動できるように設定
(defun scheme-other-window () |
となっています。
Schemeモードを試す
この設定を使うと、下図のようにCtrl+C、Sで下のウィンドウでgoshを動かし、上のウィンドウに書いたGaucheのプログラムを実行できます。上のウィンドウの(defineから始まるプログラムは階乗を計算するfact関数を定義しています。

この関数を書く際には、TABキーでEmacsが適宜インデントを調整してくれます。また、カーソルを閉じカッコの次に移動すると対応する開きカッコが青バックになりカッコの対応を確認できます。
fact関数の定義ができたら最後の閉じカッコの次にカーソルを移動し、Ctrl+X、Ctrl+Eとキーインすると、下のgoshウィンドウでカーソルの直前のS式が実行され、fact関数が定義されます。たくさんのS式(関数定義など)を実行するには、実行したいS式を選択し、Ctrl+C、Ctrl+Rで選択したS式をすべて実行できます。
その後、下のウィンドウにカーソルを移動し、(fact 10)のように入力することでfact関数の実行を試せます。また、goshウィンドウでメタP(MetaまたはALTキーとPを同時に押す)とキーインすると以前入力した行が表示され再利用できます。
このように、上のウィンドウで関数を作っては下のウィンドウで確認しながら、効率よくGaucheのプログラムを作っていけます。
Gaucheのドキュメントを読もう
実際にプログラミングする際には、その言語の文法や考え方だけではなく、ライブラリ(API)群を知ることが重要です。例えば、Javaの文法、オブジェクト指向などを完ぺきに理解していても、J2SEのAPI仕様を知らなければ現実的なプログラミングはおぼつかないと思います。
素晴らしいことに、Gaucheには日本語で読める良質のユーザーリファレンスがあります。
| 関連リンク: | |
| Gauche ユーザリファレンス http://practical-scheme.net/gauche/man/gauche-refj.html |
|
まずは、4章「基本的な構文」、6章「組み込みライブラリ」を一読することをお勧めします。途中で分からない部分が出てきたら飛ばしてよいので、どこにどんなことが書かれているかというイメージをつかんでください。
5章「マクロ」、7章「オブジェクトシステム」はGaucheの面白いところであり、この連載でも取り上げます。しかし、Lisp系の言語が初めての方には分かりにくいかもしれないので読み飛ばしても結構です。
9章「ライブラリモジュール - Gauche拡張モジュール」、10章「ライブラリモジュール - SRFI」、11章「ライブラリモジュール - ユーティリティ」はライブラリのリファレンスなので、どんな関数があるのかというイメージをつかんでください。
ちなみに、SRFI(サーフィ)というのはScheme Requests for Implementationの略で、Schemeの実質的な標準ライブラリの仕様です。Schemeの言語仕様はR5RS(Revised5 Report on the Algorithmic Language Scheme)、R6RS(Revised6 Report on the Algorithmic Language Scheme)などで規定されていますが、これらはコアな部分のみで、実用的なライブラリ群は規定されていません。
GaucheはR5RS規格のScheme処理系ですが、いくつかの独自拡張部分を持っています。
Gaucheのライブラリはかなり充実しています。実際にプログラミングする際には自分が考えているプログラムで使えそうな関数がないかリファレンスを探したり、仕様を確認したりする機会が多くなります。
そこで、ドキュメント類は、http://practical-scheme.net/vault/gauche-refj.tgzをダウンロードしてローカル環境に置いておくことをお勧めします。
3/4 |
| Index | |
| Gaucheでプログラミング | |
| Page1 Gaucheのインストール ソースコードからのインストール Windowsでのインストール |
|
| Page2 goshコマンドを使ってみる REPLで使う Gauche-readlineのインストール rlwrapを使う |
|
| Page3 Emacsを使う Schemeモードを試す Gaucheのドキュメント |
|
| Page4 日付から曜日を求めるCGIプログラム CGIユーティリティを活用する |
|
| Gaucheでメタプログラミング |
| Coding Edgeお勧め記事 |
| いまさらアルゴリズムを学ぶ意味 コーディングに役立つ! アルゴリズムの基本(1) コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう |
|
| Zope 3の魅力に迫る Zope 3とは何ぞや?(1) Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか? |
|
| 貧弱環境プログラミングのススメ 柴田 淳のコーディング天国 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く? |
|
| Haskellプログラミングの楽しみ方 のんびりHaskell(1) 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう |
|
| ちょっと変わったLisp入門 Gaucheでメタプログラミング(1) Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう |
|
TechTargetジャパン
- 実例で学ぶRailsアプリのテスト方法 (2011/12/22)
具体的なWebアプリを例に簡単なテストを使ったリファクタリングについ
て解説する - Railsの人気テストフレームワーク6選! (2011/8/18)
今回からテストを使ったリファクタリングを解説する。まずはRailsで人
気のあるテストフレームワークをいくつか紹介する - ActiveRecordの更新系操作 (2011/6/27)
Railsのモデル層を担当するActiveRecordを使った登録、更新、削除
など、更新系の機能を中心に見ていきます - 実例アプリで学ぶ“Railsらしさ”の基礎 (2011/5/26)
Ruby on Railsで書かれた実例アプリを取り上げて、初心者が陥りがちなコードの書き方を指摘します。より「Railsらしい」コードとは?
|
|

