サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
www.asahi-net.or.jp/~kc7k-nd
前章では,継続を利用すれば実行中のプログラムが自分の状態を把握し, それを保存して後で再開することができることを示した. この章で扱う計算処理のモデルは, 計算機が単一のプログラムを実行するのでなく,独立したプロセスの集合を実行するというものだ. プロセスの概念はプログラムの状態という概念と深い対応関係にある. 前章で示したマクロの上にさらにもう一層のマクロを書くことで, Common Lispプログラムの中に複数プロセスを埋め込むことができる. プロセスの抽象化 複数プロセスは,複数の処理を同時に行わなければならないプログラムを表現するのに便利だ. 伝統的なCPUはインストラクションを1つずつ実行する. 「複数プロセスは同時に複数の処理を行う」というのは, このハードウェア上の制限をどうにか乗り越えるという意味ではない. それを使って,抽象化の新たな段階でものを考えられるようになるという
Paul Graham氏の著書On Lispの邦訳を無償で公開しています.Common Lispのマクロに関する貴重な情報がいっぱいです.
構造化代入とは,代入の一般化だ. オペレータsetqとsetfは個々の変数に代入を行う. 構造化代入は代入をアクセスと組み合わせる. 第1引数に変数を単独で置くのではなく,変数のパターンを与える. すると各々に同じ構造の対応する場所に置かれた値が代入される. リストに対する構造化代入 CLtL2では,Common Lispに新マクロdestructuring-bindが加わった. このマクロは第7章で簡単に扱ったが,ここでは詳しく検討する. lstが要素を3つ持つリストで,xに第1要素を,yに第2, zに第3要素を束縛したいとしよう. CLtL1のみに対応のCommon Lispでは,こうしなければならない. (let ((x (first lst)) (y (second lst)) (z (third lst))) ...) 新マクロを使うと,代わりにこう書くことができる. (dest
ある関数が,本当にマクロであるよりも関数であった方が良いというのは, どうしたら分かるだろうか? マクロが必要な場合とそうでない場合の間には,大抵明確な区別がある. 基本的には関数を使うべきだ: 関数で間に合う所にマクロを使うのはエレガントでない. マクロが何か特定の利益を与えるときのみそれを使うべきなのだ. マクロが利益を与えるときとはいつだろうか? それがこの章の主題だ. 普通この疑問は,改良を目指すときでなく必要に迫られた上で発せられる. マクロで実現できることの大部分は,関数ではできない. 第8.1節ではマクロとしてのみ実装できるオペレータの種類を列挙する. だが境界線上に立つような場合もわずかにある(しかしこれは興味深い). つまりオペレータを関数で書いてもマクロで書いてもよいような状況だ. そのような状況について,第8.2節ではマクロについての賛否両論を挙げる. 最後に,マクロ
この章ではLispによるオブジェクト指向プログラミングについて論じる. Common Lispにはオブジェクト指向のプログラムを書くためのオペレータが揃っている. それらをまとめて,Common Lisp Object System,またはCLOSと呼ぶ. ここではCLOSを単にオブジェクト指向のプログラムを書く一手段としてではなく, Lispプログラムそのものとして捉える. CLOSをこの観点から眺めることがLispとオブジェクト指向プログラミングとの関係を理解する鍵となる. Plus ça Change オブジェクト指向プログラミングとはプログラムの構成の変化を指す. その変化はプロセッサの処理能力の分布について起こったものと似ている. 1970年,「マルチユーザのコンピュータシステム」と言えば 一つか二つの大型メインフレームが多数のダム端末に接続されたものを指していた. 今では多数の
第9章では,変数捕捉をどれも問題として扱った ---うっかりすると起きてしまい,プログラムに悪い影響だけを与えるものとして. この章では変数捕捉は建設的にも使えることを示す. それなしでは書けないような便利なマクロが幾つかあるのだ. ある式が非nilの値を返すかどうか調べ, そうならば値に何かを行いたいようなことはLispプログラミングでは珍しくない. 式の評価に大きな負担がかかるならば,普通は次のようにしなければならないだろう. (let ((result (big-long-calculation))) (if result (foo result))) 日常言語と同じように,これを次のように表現できたら楽ではないだろうか? (if (big-long-calculation) (foo it)) 変数捕捉を利用することで,まさにこのとおりに動作するifの変種を定義できる. アナフォリ
遠くない昔,Lispは何のためのプログラミング言語かと尋ねれば, 多くの人が「人工知能(AI)用のプログラミング言語」と答えただろう. 実際はLispとAIとの関係は歴史の偶然に過ぎない. Lispの開発者はJohn McCarthyで,彼は「人工知能」という言葉の提唱者でもある. 彼の生徒と同僚達は彼らのプログラムをLispで書いた. それがLispがAI用のプログラミング言語と言われ出したきっかけだ. このつながりは広く取り上げられ,1980年代の短いAIブームの間に 大変な程繰り返されたので,ほとんど迷信のようになってしまった. 幸運なことに,AIだけがLispの目的でないとの言葉が広まり始めた. 最近のハードウェアとソフトウェアの進歩のおかげで,Lispは商業的にも成功し始めた: 今では最高のUNIX系テキストエディタGNU Emacs, 業界標準のデスクトップCADソフトAuto
LispのS式の生涯で重要な瞬間は3つ,すなわち読み込み時,コンパイル時,実行時だ. 関数を操れるのは実行時だ. マクロによりプログラムをコンパイル時に変換する機会が得られる. この章ではリードマクロを扱うが,これは読み込み時に機能するものだ. マクロ文字 Lispの基本的思想に従い,リーダは大幅に制御することができる. リーダの動作は完全に実行中の変更が効く属性値と変数で制御できる. リーダは複数の段階でプログラムできる. 一番容易に動作を変更する方法は,新しいマクロ文字を定義することだ. マクロ文字とはLispのリーダから特別な扱いを要求する文字だ. 例えば小文字のaは普通は小文字のbと全く同じ扱いだが,開き括弧は少々異なる. 開き括弧はリストの読み込みが開始したことの印だ. そういった文字にはそれぞれ関数が関連付けられており, それがLispのリーダにその文字を読み込んだ際の指示を与
Lispのマクロ機能を使うと,コードの変換によってオペレータを実装することができる. マクロ定義とは実質的にLispコードを生成する関数だ ---つまりプログラムを書くプログラムだ. この一歩から始めて,大きな可能性と予期せぬ危険に足を踏み入れていく. 第7章から第10章はマクロの基礎講座だ. この章ではマクロがどのように動作するのかを説明し, マクロを書いたり動作を確かめるときのテクニックを示し, マクロを書くスタイルについての話題に進む. マクロはどのように動作するか マクロは呼び出せるし値を返せるので,関数と一緒くたにされがちだ. マクロ定義は関数定義に似ていることもあるし, 実際はマクロであるdoを普段「組み込み関数」と呼ぶ人も多い. しかしこの喩えを突き詰めすぎると混乱の元になる. マクロの動作は普通の関数とは違っている. マクロはどのように,そしてなぜ違うのかを知ることは,マク
継続とは,動作中に凍結したプログラムだ. すなわち計算処理の状態を含んだ一つの関数的オブジェクトだ. 保存された計算処理は,それが中断された時点から再開する. プログラムの状態を保存し,後に再開できる能力は,ある種の問題解決に素晴しい威力を発揮する. 例えば並列処理では,中断されたプロセスを継続で表すのが便利だ. 非決定的探索問題では,継続は探索ツリーのノードを表現できる. 継続の理解は難しいかも知れない. この章ではその話題に2段階で取り組む. この章の前半では継続の組込みサポートのあるSchemeでの用例を見る. 継続の振舞を説明し終わったら,後半ではCommon Lispプログラムで継続を生成するマクロの使い方を示す. 第22--24章のいずれでも,ここで定義したマクロを利用する. Schemeの継続 Common Lispでシンボルの「シンボル値」と「シンボル関数」と呼ぶものをSc
On Lisp邦訳 草稿置き場 Japanese texts only! 代表的LispハッカーのPaul Graham氏がご自分のサイト www.paulgraham.com で公開なさっている著書 "On Lisp" の邦訳を,2007年3月にオーム社から出版しました. On Lisp | オーム社eStore(β) On Lisp サポートページ(practical-schemeに間借り) この"On Lisp"は草稿を公開しながら翻訳を進めてきましたが, 草稿は今後もLaTeXソースおよびPDFファイルとして公開を続けていきます. 書籍の出版に当たっては念入りのレビューにより数多くの誤り等が修正されましたが,この草稿は修正前のものです. とは言え大体は「読める」レベルです. 「いきなり買うのはためらわれるけど流し読みしたい」「内容の一部だけ参考にしたい」等の場合に役立つでしょう.
このページを最初にブックマークしてみませんか?
『On Lisp日本語訳 草稿置き場』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く