プログラムとは#
プログラムはブラックボックスであり、何かを入力すると、あなたが望むものを出力します。大規模なシステムにおける複雑さを制御する技術は、コンピュータ技術の鍵です。コンピュータ科学の複雑さは「現実的」ではなく、物理的要因などの影響を受けません。コンピュータ科学が扱うのは理想化されたコンポーネントであり、理想と現実の間には大きな違いはなく、自由に組み合わせて構築できます。コンピュータ工学は、自由に制約なくブロックを積み上げるようなものです。抽象はコンピュータ科学における重要な思考です。プログラムのブラックボックスは、無数のブラックボックスから構成され(詳細を隠し、ブラックボックスの抽象思考を行います)。
プログラミング言語とは#
プログラミング言語はブラックボックスを実現する呪文であり、命令です。基本命令を使って複雑な命令を構築し、基本データを使って複雑なデータを構築し、ブラックボックスを使ってカプセル化します。これがプログラミングのプロセスです。
複雑さの制御#
複雑さを制御する方法は、プログラム内に合意されたインターフェースを残し、それらを組み合わせる方法を考えることです。オブジェクト指向思想と集約思想(「流れ」)は、主な二つの方法です。
lisp とは#
ある言語を理解するための主な三つのポイント:
構成要素は何か?
これらの要素をどのように組み合わせるか?
抽象の方法は何か?
組み合わせの方法#
3 + y 12.1
このような「記号」はすべて lisp の抽象データです。
(+ 3 12 1.1)
これが組み合わせ式で、演算子と演算対象から構成されています(前置記法)。実際、組み合わせ式も「木」です。
+
/ | \
3 12 1.1
より多くの枝も同様です。
+
/ | \
3 12 1.1
|
+
| \
1 0.1
私たちはこれを理解できます:プログラムはこれらの木を構築しているのです。
抽象の方法#
(define (add a b) (+ a b))
add という名前の関数を定義し、関数には二つの値があり、これらの値の和を返します。もちろん、lambda を使ってプロセスを構築することもできます。
(define square
(lambda (x) (* x x)))
これらすべてが構築のプロセスです。
(define (average x y)
(/ (+ x y) 2))
(define (mean-square (x y)
(average (square x)
(square y))))
簡単な平均二乗計算器
場合分けの構築
(define (abs x)
(cond ((< x 0) (- x)
(= x 0) (0)
(> x 0) (x))))
;; または
(define (abs x)
(if (< x 0)
(- x)
X))