第1回 ちょっと変わったLisp入門
吉田 裕美
有限会社イーワイオフィス
2008/10/31
Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう(編集部)
- - PR -
「Gaucheでメタプログラミング」と題して、これからGaucheを使ったプログラミングの連載を書かせていただきます吉田裕美です。よろしくお願いいたします。
Gaucheとは
今回の連載で取り上げるGaucheはハワイ在住の日本人ハッカー、川合史朗さんが作った、Lispの一種であるSchemeのオープンソース処理系です。
Gaucheの特徴は、PerlやRubyのように気軽に使える軽い処理系だということです。Perl同様に正規表現や文字列操作が行え、ちょっとしたツールの作成にも使えます。しかし、非常に強力なCommon Lisp風オブジェクトシステムを持ち、Lispならではのマクロに加え、Webやグラフィックスなどの豊富なライブラリも持っているので実用的なシステムの構築にも使えます。
2008年3月にオライリー・ジャパンから出版された「プログラミングGauche」も好評で版を重ねており、これから本格的にGaucheを学びたいという方は参考書としてお勧めです。
| 関連リンク: | |
| Gauche - A Scheme Interpreter http://practical-scheme.net/gauche/index-j.html |
|
ちょっと変わったLisp入門
ほとんどの皆さまは、どこかでLispのコードを目にしたことがあると思います。しかし、COBOLやC、Javaなどのメインストリームの言語を使われてきた方にとっては、とても不思議に見える言語かもしれません。
if文やwhile文といった文法もないし、計算式や代入文もありません。カッコと単語とカッコとカッコとカッコ……という見た目から、人間の使う言語ではないという印象を持っている方もいるようです。また、Lispの書籍には難しい用語や数学的な説明が多く、頭の良い人のみが使える言語だと思われている方もいるかもしれません。
私がLispを知ったのは、大学の卒業研究でLispの処理系を作ることになったのが始まりです。研究は先生の書かれた論文を基にした実装で、処理系は主にアセンブラで書きました。いざ処理系が動き出しLispコードを動かす段になり、本に書かれた例題以外のコードがなかなか書けなかったのを、いまでも鮮明に覚えています(笑)。
連載第1回では、ちょっと変わった視点からLispに入門してみましょう。
LispはPerlやRubyのご先祖さま
図1は、プログラミング言語の歴史の一部を書いたものです。多少私の思い込みも含まれているかもしれませんが、お許しください。
![]() |
| 図1 プログラミング言語の歴史 |
図の中で、実線の矢印は直系にある言語、破線の矢印は影響を表しています。また、上下に分かれていますが上の方はコンパイルを行い、コンパイル時点でいろいろなものが決まる静的な言語。下はインタプリタがメインで、いろいろなものが動的に決まる言語です(Haskellは静的型付けを持つ言語ですがイメージ的に下に入れました)。
かなりの方が仕事では上にあるC、C++、Java、C#やCOBOLなどを使われているかもしれません。また、最近はPerl、Python、PHP、Rubyなどを使われている方も多いと思います。さらに、Webにかかわる方はJavaScriptは外せない言語になってきていると思います。
この図から分かるように、LispはFORTRANに次ぐ古い言語です。そしてSmalltalkやPerl、Python、Rubyなどの言語に大きな影響を与えています。また、変数などのメモリを動的に管理し、不要になったメモリを自動的に回収するガベージコレクション(GC)はいまやメインストリームのJavaやC#にも採用されています。また、ML、OCaml、Haskellのような関数言語の先駆けともなりました。
Lispは人工知能(AI)ブームのメイン言語になり独自の発展を続けました。しかし、その過程でたくさんの方言が生み出されてしまいました。そこで、Lisp言語の標準としてCommon Lispが制定されました。
現在では一般にLispといえば、このCommon Lispを指します。しかし、Common Lispは制定時のメジャーなLisp方言のスーパーセットとして作られたため、非常に大きな仕様の言語になってしまいました。
Lispの発展の中で、純粋にLispに必要なものは何かを追求し、シンプルで強力な概念を核に持つSchemeという方言が生まれました。Schemeはコンピュターサイエンスを教えるのにも最適であったため、大学のコンピュターサイエンス学科で盛んに使われました。
Schemeはそのシンプルさ強力さからハッカーに気に入られ、現実のプログラミングの世界でも独自拡張を行った処理系がいくつも作られ、使われています。Gaucheもそんな処理系の1つです。
1/5 |
| Index | |
| ちょっと変わったLisp入門 | |
| Page1 Gaucheとは ちょっと変わったLisp入門 LispはPerlやRubyのご先祖さま |
|
| Page2 Lisp超入門 S式とデータ構造 S式の実装 |
|
| Page3 Lisp処理系を作ってみよう! セルの管理 出力部分 入力部分 メイン |
|
| Page4 Lisp処理系における変数について Lisp処理系における関数について 式の評価(eval) 関数の評価(apply) |
|
| Page5 eval、apply、eval_listの実行経過 スペシャルフォームとマクロ |
|
| 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らしい」コードとは?
|
|


