SICPとは

Structure and Interpretation of Computer Programsの略.

この本を読んでない人はモグリだといわれるような, 計算機科学における古典的教科書.

SICPはしくぴーと読む.

SICP Literature Notes

Chapter 1::Building Abstractions with Procedures

手続きによる抽象

  • 複数の単純な考えを合成して 1 つにする.

  • 2 つの考えを同時に見えるように 1 つのもので繋ぐ. その実在においてそれらに付随しているほかの考えからそれらを分離する

    proceduresdata
    primitive element+, *, <, =23, 1.738
    means of combination() combination
    if
    cond
    means of abstractiondefun

    言語は以下の仕掛けを有している.

Level0: 基本式 (プリミティブな手続きの構築)

もっとも基本的な手続き.

  • which represent the simplest entities the language is concerned with,
  • 言語が関わるもっとも単純なものを表す.

primitive expressions 基本式:

  • which represent the simplest entities the language is concerned with,
  • 言語が関わるもっとも単純なものを表す.
    1, +, -

Level1: 組合せ法 (組み合わせ手続きによる抽象の構築)

複数の手続きを組み合わせて一つにした手続き.

  • by which compound elements are built from simpler ones.
  • より単純なものから合成物をつくる.

Emacs Lisp では 組合せ (combination) は () で表現する.

(* 1 1)

Level2: 抽象化法 (名前つき値による抽象の構築)

オブジェクトを値 (value) とする変数 (variable) を識別するものが名前. 名前をつけることで, 値を識別する.

Emacs Lisp では 名前つけは defun で表現する.

(defun size () 2)
(size)

Level3: 手続き定義 (名前つき手続きによる抽象の構築)

名前付けは, 値だけでなくて手続きにもできる.

  • by which compound elements can be named and manipulated as units.
  • 合成物に名をつけ, 単一のもとして扱う.

名前のつけられた手続き. これをいわゆる関数と呼ぶ.

(defun square (x) (* x x))

手続き定義は, 細部をかくすことができる. いわゆる 手続き抽象 という.

Level4: 高階手続きによる抽象の構築

手続きをあつかう手続きを高階手続きという

  • 手続きを引数にとる
  • 手続きを戻り値として返す
(square (square (square 2)))

Level5: lambda (名前なし手続き による抽象の構築)

高階手続きの引数にいちいち, defun で定義された手続きをわかすのは煩わしい.

名前なしの手続きを扱いたい. プロセスを生み出す特殊形式を lambda という.

Emacs Lisp では lambda で表現する.

名前つき手続きは, 以下の糖衣構文となっている. Lisp インタプリタは実際には以下のように解釈している.

(defun square
    (lambda (x) (* x x))

われわれはプログラマとして, プログラムの根底にある抽象をみつけ, より強力な抽象化ができるように努めてなければならない.

高階手続きの重要さは, それにより抽象をプログラム言語の要素して確かに表せ, 他の計算要素として扱えるようになる点にある.

Chapter 2:: Building Abstractions with Data

Chapter 3:: Modularity, Objects, and State

Chapter 4:: Metalinguistic Abstraction

Chapter 5:: Computing with Register Machines

Topics

Insights

2015に読み進めて挫折. また挑戦したい.

🔸SICPが難しくて自分の頭の悪さを感じたことが休職のきっかけのひとつ

⚫会社に2週間連続で遅刻して会社を休職(2015/12)のきっかけはSCIPの挫折体験.

小さな挫折経験として休職の半年前にSICPの難しさに打ちのめされてメンタルが凹んだ. 小さな挫折が雪だるまのように大きくなって休職にいたった. これは恐怖体験であるとともに, 克服するべき人生の課題だ.

💭Clojureを学ぶことはSICPの挫折体験を克服すること(2022/10/13)

これは時間をかければ必ず理解できるものであり, 大事なのは難しさに打ちのめされて学習をやめないことだ. 挫折しなければ必ず理解できる.

References