第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の世界を体験してみよう
  Coding Edgeフォーラムフィード  2.01.00.91

TechTargetジャパン

Coding Edge フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH