2009年1月4日日曜日

【PAIP】24 ANSI Common Lisp


  • 前説

    • この本執筆の時点では、CLtL2の出版まもなく、CLtL2に対応した処理系はなかろう、という状況。
    • それがここで章をさいてANSI CLを扱う理由であろう。

  • 24.1 Packages

    • 基本概念を紹介、詳細はCLtL2をみてね。
    • CLには少なくとも7つの名前空間がある。

      • 1 functions/macros
      • 2 variables
      • 3 special variables
      • 4 data types (defstruct, deftype, defclass)
      • 5 labels (tagbody)
      • 6 block names (block)
      • 7 quoted symbols (treated as constant)

    • また、ユーザがシンボルのスロットを使うことによりシンボルを辞書として使うならば、その辞書毎に名前空間が新設されるともいえる。
    • 名前空間クイズ:それぞれのfに適用される名前空間は?

      (defun f (f)
      (block f
      (tagbody
      f (catch 'f
      (if (typep f 'f)
      (throw 'f (go f)))
      (funcall #'f (get (symbol-value 'f) 'f))))))

      私の解答。

      (defun f (f) ; functions/macros, variables
      (block f ; block names
      (tagbody
      f (catch 'f ; labels, quoted symbols
      (if (typep f 'f) ; data types, quoted symbols
      (throw 'f (go f))) ; quoted symbols, labels
      (funcall #'f (get (symbol-value 'f) 'f)))))) ; functions/macros, special variables, quoted symbols


  • 24.2 Conditions and Error Handling

    • コンディションシステムをなんとなく。

  • 24.3 Pretty Printing

    • CLtL2では、pretty-printingがちゃんと定義されて、しかもユーザー拡張可能になったよ。
    • 詳しくはCLtL2を。

  • 24.4 Series

    • 表記は関数型に近いが効率よいコードにコンパイルされるよ。
    • pipesと同じようにlazyだよ。
    • ANSI Common Lispにはまだ採用されていないよ。

  • 24.5 The Loop Macro

    • Norvigによるthe complex loopの簡易実装。the complex loopを実装していない処理系でも、PAIP内のサンプルが動くようにと掲載したよ。複雑なマクロの例としても。

  • 24.6 Sequence Functions

    • 前節と同様の対処をSequence系の関数についても実施。
    • Once-onlyを導入。
    • マクロは問題(problem)の記述にどんどん使え、しかし解法(solution)の実装に使うのは慎重に。
    • マクロと参照透明性。Norvigのifの教訓。
    • map-intoの実装。
    • reduce with :keyの実装。


一応865Pあたりまで到達。こつこつ。

0 件のコメント: