2008年1月15日火曜日

第4講 基本関数を修了するや,突然関数定義なんと大それた・・・


  • 「...、えーと、ちょっと待て、これがこのままで評価されると困るから、評価のレベルを合わせるために
    '(10 aho 51)
    としておけば済む話ですね?」
  • 「listは、(引数が0個の場合を除き)評価されるだびに"新しい"リストを作り出す」
  • 練習問題
    1. (A)
    2. (NIL)
    3. (A NIL)
    4. (cons (A) (B)) => ((A) B)
    5. ((1) (2) (3))
    6. (cons 'head (body tail)) => (HEAD BODY TAIL)
    あってた。
  • 「Lispの世界でTanakaと言ってしまうと、Tanakaというアトムは1つしか存在しないのだ」
  • 「名前というアトム、あるいはシンボル(Symbol)は、あくまでも名前という実体なのであって、...」
  • 「Lispは、名前アトムに対し、1個のデータとして存在し、データの海の中を浮遊しうるという実存性を与えた」
  • 練習問題
    1. T
    2. T
    3. NIL
    4. T
    5. T
    6. NIL
    7. NIL
    8. T
    9. NIL
    10. T
    11. NIL
    12. NIL
    13. T
    14. T
    15. NIL
    15を間違えた。あ、そうかNILまでいっちゃうから。
  • 「関数がブラックボックスとして、中身が見えにくいようになっていればいるほど、モジュラー性が高いと呼ばれます。一時的なメモ用紙だの、束縛だのという苦しまぎれの言葉や概念をもちだしたのは、人間にとって自然なモジュラー性を保証するためのメカニズムを理解するために止むを得なかったのです」

2008年1月8日火曜日

第3講 解釈は評価なり・・・辞書なくして世は渡れず


  • キン肉マンってこのころからあったのか。
  • 「これが関数名と引数並びとからなる2組を簡約化した、いわば題付き並びであることも説明したな」
  • 「Lispの世界ではすべての情報構造がS式で表されなければならない」
  • 「書かれたS式が静の世界とすれば、S式から別のS式を生み出すという計算機構は動の世界じゃ。静と動、この厳しい対立の美しさがすなわちLispなのである」
  • 練習問題
    1. 15
    2. -15
    3. 21
    4. 7
    5. 20
    6. 37
    7. 15
    8. 15
    9. 5
    あってた。
  • '''(aho doji)

    CL-USER> (eval (eval '''(aho doji)))
    (AHO DOJI)
    CL-USER>

  • そういえば、シンボルという用語はでてきてないな。
  • う、(+ '1 '2)がなぜ3になるのかがわからない。。。
  • 「数を評価したらその数自身になるというのもプログラム言語としての1つの約束にすぎないことに注意しておきましょう」
  • 「その辞書とやらもやっぱりS式で表せるんですか? もちろん、そうです」
  • 「しょっちゅう使うものに限って変に乱れてくるんですよね」


  • CL-USER> (setq + 10)
    10
    CL-USER> (+ + +)
    ; Evaluation aborted.
    CL-USER> +
    (SETQ + 10)
    CL-USER> (set '+ 10)
    10
    CL-USER> +
    (SET '+ 10)
    CL-USER> (set '- 10)
    10
    CL-USER> -
    -
    CL-USER> (- - -)
    ; Evaluation aborted.
    CL-USER> (- 1 1)
    0
    CL-USER> (+ 1 1)
    2
    CL-USER> +
    (+ 1 1)
    CL-USER> -
    -
    CL-USER> +
    -
    CL-USER> -
    -
    CL-USER> (progn
    (print nil)
    -)

    NIL
    (PROGN (PRINT NIL) -)
    CL-USER>

    あり? CLのREPLでは、+は直前の式を、-は現在の式を表わすんだ。
  • 練習問題
    1. nil
    2. t
    3. nil
    4. 58
    5. (+ 87 90) -> 177
    6. (+ B) -> (+ '(87 58 90)) -> error
    7. (58 90)
    8. nil
    9. error
    10. t
    11. error
    12. error
    13. error
    6, 9, 11, 12 を間違えた。。。
    そうか。7がIの辞書登録なのか。すると9,11,12は納得。
    6は???
    aclでためしてみると、、、やはりエラーだ。

第2講 CARとCDRで世間を渡れば権兵衛もたじろぐ


  • 「まずフィネスすることを覚えよ。次にフィネスしないことを覚えよ。最後に、時々フィネスすることを覚えよ」
  • 「もっともLispの世界に足を踏み入れてしまえば、Lispのほうがはるかに常識的に思えてくる」そうなのか? やはりblue pillなのか?
  • 練習問題
    1. car (A), cdr nil.
    2. car (nil), cdr (nil).
    3. (B C).
    4. D.
    5. cdr (B (C (D))), cadr B.
    6. car (((A) B) C), cdr (D)
    7. ((A) B).
    8. (A).
    9 ().
    10. ((A B C) D E F).
    5と9を間違えた。でも9はCLなら正解か。
  • S式は、car、cdr、atomとnullという観測装置で内部構造を観測できる。
  • 「これでcarもcdrもatomもnullもそれを通してS式を見ればまたS式が見えるという仕掛けになった」
  • 「情報構造は、処理対象となるデータばかりでなく、処理そのものももっている」
  • 練習問題
    ((56) (29 (P 5) (X 2))
    あってた。
  • 「いったん、S式の形で表現してしまえば、それの"解釈"はまったく自由だから、手順の記述自身をデータと見なすような面白い処理が可能になる」

第1講 初めての人のためのLISP


  • いきなりたらいまわしだ。
  • 「Lispを"言語"としてではなく"概念"としてわかってもらうようにするのがよい」
  • 「当店では常識に反したような規則は作らないというのを規則としております」
  • 「Lispでもアトムを2つに分解したりしないというのが原則です」
  • ) := コッカ。
  • 「すべてのデータには、そのデータが存在している文脈というものがある。ちょっと先走って言えば、こういう文脈構造を支えるのがプログラムなのであるよ」
  • 「Lispの場合、扱う対象世界の最小単位をアトムとし、構造をもつものをリストというデータ構造へ写像してモデル化するのです」

読む目的

読む目的は気分転換。

読書メモとして気になったフレーズとかを書いていきます。