第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の世界を体験してみよう |
|
- [ニッチ]E4Xで攻撃できる? できない? (2010/2/8)
ECMAScriptでXMLを扱う「E4X」。ニッチかもしれませんが、攻撃の可能性があることだけは知っておきましょう - GAE上でLL+RDBアプリを作ろう (2010/2/3)
開発者にとって魅力的な環境に映るGoogle App Engine。これまでの開発手法を変えずに使えないだろうか - 豆まきユースケースの包含 (2010/2/1)
デバッグが上手くいかず、気分転換にもらった豆をポリポリ。節分のユースケースを考え始めます - Apacheで仮想ホストを動かそう (2010/1/29)
1台のApacheサーバで、複数の公開サイトを提供するには? 仮想ホストの設定の意味を知ろう
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |








