SICPゼミ第1回

魔術師本を読もうという話で立ち上がったゼミ
某所で魔術師本のPDFを見ながら「Lisp殺す」「Lispクソ」「括弧死ね」と言い続けるだけの簡単なお仕事

読んでるpdf

github.com

1.1 プログラミングの要素

この辺は導入っぽいところなのでマッハで読み飛ばしていた
但し,次の2点の区別はやっておかないと後で死ぬ

  • プロセス
  • 手続き

前者は「魔法使いの言葉で言うと、精霊のようなものです。それは、見たり触れたりすることはできません。」だそうだ.後者は具体的なプログラム文字列のこと.

1.1.1 式

中置記法w

1.1.2 命名と環境

(define die_lisp NULL)

1.1.3 組み合わせの評価

ごちゃごちゃしてきた時にどの順で評価しているのか問題
ここではそんなに気にしなくていいけど,後々重要

1.1.4 複合手続き

組み込み手続き(Lispがデフォルトで用意している手続きのこと)ではないものを自前で用意するのが複合手続き
手続きをつくり,さらにその作った手続きに名前をつけるという2つの操作をしていること,そしてその2つが別々の操作として分割できることは後で重要になるらしいので書いておく

1.1.5 手続き適用の置換モデル

定義した手続きがどのようにして適用されていくかをざっくばらんに説明している
嘘が混ざっているらしいので話半分にスルーした
ただし,「正規順序評価」と「適用順序評価」は後でしょっちゅう出てくる単語なので要確認

1.1.6 条件式と述語

cond大好き

練習問題1.5

正規順序評価だと(define (p) (p))のせいで無限ループに陥って死ぬ

1.1.7 例: ニュートン法による平方根

ニュートン法とか知らないけど知ってることにする

練習問題1.6

ここで定義されたnew-ifは,呼びだされた瞬間にpredicate,then-clause,else-clause全てを評価しにかかる.なので無限ループに陥って無事死亡.

1.1.8 ブラックボックス抽象化としての手続き

変数のスコープとかその辺の話
そんなに特筆すべきことはないはず