タグ

ブックマーク / www.asahi-net.or.jp/~kc7k-nd (6)

  • On Lisp日本語訳 草稿置き場

    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 --- オブジェクト指向Lisp

    この章ではLispによるオブジェクト指向プログラミングについて論じる. Common Lispにはオブジェクト指向のプログラムを書くためのオペレータが揃っている. それらをまとめて,Common Lisp Object System,またはCLOSと呼ぶ. ここではCLOSを単にオブジェクト指向のプログラムを書く一手段としてではなく, Lispプログラムそのものとして捉える. CLOSをこの観点から眺めることがLispとオブジェクト指向プログラミングとの関係を理解する鍵となる. Plus ça Change オブジェクト指向プログラミングとはプログラムの構成の変化を指す. その変化はプロセッサの処理能力の分布について起こったものと似ている. 1970年,「マルチユーザのコンピュータシステム」と言えば 一つか二つの大型メインフレームが多数のダム端末に接続されたものを指していた. 今では多数の

    kiyo_hiko
    kiyo_hiko 2014/04/02
    「拡張可能なプログラムはオブジェクト指向である必要は全くない.前の章で示したのは,Lispプログラムがモノリシックなコードの塊である必然性はないということに過ぎない」
  • On Lisp --- パッケージ

    Common Lispではパッケージによってコードをモジュールにまとめる. 初期のLisp方言にはoblistと呼ばれるシンボル表があり, システムが読み込んだシンボルの一覧を保持していた. シンボルがoblist内に持つエントリを通じてシステムはその値や属性リスト等を参照していた. oblistに含まれるシンボルはインターン(intern)されていると言われた. 最近のLisp方言はoblistの概念を複数のパッケージに分割した. 現在,シンボルは単にインターンされているのではなく,ある特定のパッケージにインターンされている. あるパッケージにインターンされたシンボルが他のパッケージで参照できるようにするには 明示的な宣言が必要なので(誤魔化す方法はあるが), パッケージはモジュール性を促進する. パッケージはLispオブジェクトの一種だ. 現在のパッケージは常にグローバル変数*pack

    kiyo_hiko
    kiyo_hiko 2014/03/05
    「パッケージは混乱の元になりがちだ. この案内ではほとんど表面を撫でてすらいない. 詳細についてはCLtL2の第11章を参照のこと」 CLtL2、ほしーっ!!
  • On Lisp --- 継続

    継続とは,動作中に凍結したプログラムだ. すなわち計算処理の状態を含んだ一つの関数的オブジェクトだ. 保存された計算処理は,それが中断された時点から再開する. プログラムの状態を保存し,後に再開できる能力は,ある種の問題解決に素晴しい威力を発揮する. 例えば並列処理では,中断されたプロセスを継続で表すのが便利だ. 非決定的探索問題では,継続は探索ツリーのノードを表現できる. 継続の理解は難しいかも知れない. この章ではその話題に2段階で取り組む. この章の前半では継続の組込みサポートのあるSchemeでの用例を見る. 継続の振舞を説明し終わったら,後半ではCommon Lispプログラムで継続を生成するマクロの使い方を示す. 第22--24章のいずれでも,ここで定義したマクロを利用する. Schemeの継続 Common Lispでシンボルの「シンボル値」と「シンボル関数」と呼ぶものをSc

    kiyo_hiko
    kiyo_hiko 2013/09/20
    継続がいまだによくわかってない
  • On Lisp --- 拡張可能なプログラミング言語

    遠くない昔,Lispは何のためのプログラミング言語かと尋ねれば, 多くの人が「人工知能(AI)用のプログラミング言語」と答えただろう. 実際はLispとAIとの関係は歴史の偶然に過ぎない. Lispの開発者はJohn McCarthyで,彼は「人工知能」という言葉の提唱者でもある. 彼の生徒と同僚達は彼らのプログラムをLispで書いた. それがLispがAI用のプログラミング言語と言われ出したきっかけだ. このつながりは広く取り上げられ,1980年代の短いAIブームの間に 大変な程繰り返されたので,ほとんど迷信のようになってしまった. 幸運なことに,AIだけがLispの目的でないとの言葉が広まり始めた. 最近のハードウェアとソフトウェアの進歩のおかげで,Lispは商業的にも成功し始めた: 今では最高のUNIX系テキストエディタGNU Emacs, 業界標準のデスクトップCADソフトAuto

    kiyo_hiko
    kiyo_hiko 2013/07/26
    マクロって言語にビルトインのスニペットだと思えばそれほど異質(foreign)なものでもなさげ。マクロ強い
  • On 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

    kiyo_hiko
    kiyo_hiko 2013/07/03
    このような不思議な変数束縛ができるらしい (destructuring-bind (x (y) . z) '(a (b) c d) (list x y z)) 便利そう
  • 1