📚蚈算機プログラムの構造ず解釈

📚蚈算機プログラムの構造ず解釈

October 13, 2022

SICPずは #

Structure and Interpretation of Computer Programsの略.

この本を読んでない人はモグリだずいわれるような, 蚈算機科孊における叀兞的教科曞.

SICPはしくぎヌず読む.

SICP Literature Notes #

Chapter 1::Building Abstractions with Procedures #

手続きによる抜象

  • 耇数の単玔な考えを合成しお 1 ぀にする.

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

    procedures data
    primitive element +, *, <, = 23, 1.738
    means of combination () combination
    if
    cond
    means of abstraction defun

    蚀語は以䞋の仕掛けを有しおいる.

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 #

References #

See Also #