邱 璇洛 (ゝ∀・)

邱 璇洛 (ゝ∀・)

你好哇(*゚∀゚*)~这里是邱璇洛的博客,常常用来记录一些技术文章和小日常~(σ゚∀゚)σ
twitter
tg_channel

SICP-Lec1a.lispの概要

プログラムとは#

プログラムはブラックボックスであり、何かを入力すると、あなたが望むものを出力します。大規模なシステムにおける複雑さを制御する技術は、コンピュータ技術の鍵です。コンピュータ科学の複雑さは「現実的」ではなく、物理的要因などの影響を受けません。コンピュータ科学が扱うのは理想化されたコンポーネントであり、理想と現実の間には大きな違いはなく、自由に組み合わせて構築できます。コンピュータ工学は、自由に制約なくブロックを積み上げるようなものです。抽象はコンピュータ科学における重要な思考です。プログラムのブラックボックスは、無数のブラックボックスから構成され(詳細を隠し、ブラックボックスの抽象思考を行います)。

プログラミング言語とは#

プログラミング言語はブラックボックスを実現する呪文であり、命令です。基本命令を使って複雑な命令を構築し、基本データを使って複雑なデータを構築し、ブラックボックスを使ってカプセル化します。これがプログラミングのプロセスです。

複雑さの制御#

複雑さを制御する方法は、プログラム内に合意されたインターフェースを残し、それらを組み合わせる方法を考えることです。オブジェクト指向思想と集約思想(「流れ」)は、主な二つの方法です。

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))
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。