@uents blog

Code wins arguments.

SICP

SICP 読書ノート#20 - 2.4.3 データ主導プログラミングと加法性(1) (pp.105-108)

「§2.4.3 データ主導プログラミングと加法性」から。 全体のソースコードはGitHubに置いています。 https://github.com/uents/sicp/blob/master/ch2/ch2.4.3.1.scm 複素数のデータ主導プログラミング 前回のエントリの複素数データを例に、 データ主導プログ…

SICP 読書ノート#19 - 2.4 抽象データの多重表現 (pp.99-105)

「§2.4 抽象データの多重表現」から。 はじめに §2.4の最後の問題2.76で総括するが、抽象データの汎用演算の構築には3つの戦略がある。 明白な振り分けを持つ汎用演算 (strategies—generic operations with explicit dispatch) データ主導流 (data-directed …

SICP 読書ノート#18 - 2.3.4 Huffman符号化木(2) (pp.94-99)

「§2.3.4 Huffman符号化木」について。 テキストの説明がかなりわかりやすく、楽しく読めました。 問題 2.67 テキストのコードを写経し実行してみる。 (define sample-tree (make-code-tree (make-leaf 'A 4) (make-code-tree (make-leaf 'B 2) (make-code-t…

SICP 読書ノート#17 - 2.3.4 Huffman符号化木(1) (pp.94-99)

おおよそ理解できてるつもりだけど、問題 2.69が上手く解けない。 (define (generate-huffman-tree pairs) (successive-merge (make-leaf-set pairs))) (define (successive-merge leafs) (if (null? leafs) nil (successive-merge-1 (cdr leafs) (car leafs…

SICP 読書ノート#16 - 2.3.3 集合の表現 (pp.88-94)

「§2.3.3 集合の表現」から。 順序づけられないリストの集合 写経して動かしてみる。intersection-setは内積(積集合)が求まる。 racket@> (element-of-set? 'a '(a b c d)) #t racket@> (adjoin-set 'z '(a b c d)) '(z a b c d) racket@> (intersection-s…

SICP 読書ノート#15 - 2.3 記号データ (pp.83-88)

「§2.3 記号データ」から。原文はSymbolic Data。 クォート これまではデータは全て値だった。クォートするとそのデータをシンボルとしてみなすことができる。 '(a b c)と(list 'a 'b 'c)と(cons 'a (cons 'b (cons 'b nil)))は等価。 eq?とequal?の違い。Ja…

SICP 読書ノート#14 - 2.2.4 図形言語(4) (pp.73-83)

引き続き「§2.2.4 図形言語」。いよいよ終盤。 ペインタの変換と組み合わせ transform-painterというペインタのフレーム変換を行う手続きを定義する。 (define (transform-painter painter origin corner1 corner2) (lambda (frame) (let ((m (frame-coord-m…

SICP 読書ノート#13 - 2.2.4 図形言語(3) (pp.73-83)

引き続き「§2.2.4 図形言語」。 ベクトル (問題 2.46) ベクトルのコンストラクタ、アクセサ、演算手続きを実装する。 (define (make-vect x y) (cons x y)) (define xcor-vect car) (define ycor-vect cdr) (define (add-vect vec1 vec2) (make-vect (+ (xco…

SICP 読書ノート#12 - 2.2.4 図形言語(2) (pp.73-83)

Racket Graphics Legacy Libraryを使う 前回のplanet/sicp.ssではほとんど実装済みであまり勉強にならないので、Graphics Legacy Libraryがおすすめ。 http://docs.racket-lang.org/graphics/index.html http://stackoverflow.com/questions/13592352/compil…

SICP 読書ノート#11 - 2.2.4 図形言語(1) (pp.73-83)

Racket supports The SICP Picuture Languageを使う 色々試行錯誤したが、図形言語を単に試すだけならこれがいちばん簡単だった。 http://planet.racket-lang.org/package-source/soegaard/sicp.plt/2/1/planet-docs/sicp-manual/index.html http://d.hatena…

SICP 読書ノート#10 - SICPのためのプログラミング環境構築

「§2.2.4 図形言語」に入る際にグラフィックスまわりのライブラリが必要になってきたので、 遅ればせながらScheme処理系であるRacketやEmacsの環境構築方法をまとめてみました。 (2015/04/29追記) 内容が古くなってきたので全体的に加筆/修正しました (2015/…

SICP 読書ノート#9 - 2.2.3 公認インターフェースとしての並び - 写像の入れ子 (pp.71-73)

「§2.2.3 公認インターフェースの並び」の「写像の入れ子」から。 写像の入れ子 まずは写経。 enumerate-intervalから復習。 (define (enumerate-interval low high) (if (> low high) nil (cons low (enumerate-interval (+ low 1) high)))) racket@> (enum…

SICP 読書ノート#8 - 2.2.3 公認インターフェースとしての並び (pp.65-70)

「§2.2.3 公認インターフェースの並び」から。 公認インターフェース(conventional interfaces)というのがよくわからないけど、信号処理のフィルタのように手続きを組み合わせてプログラムを構成することを考える模様。 並びの演算 filterやaccumulateの実…

SICP 読書ノート#7 - 2.2 階層データ構造と閉包性 (pp.55-65)

「§2.2 階層データ構造と閉包性」から。 閉包性とはclosure propertyというそうだが、このclosureはJavaScripter等で おなじみの「クロージャ」ではなく、部品(モジュール同士)が密結合することなく 部品のプロパティがその中に閉じており独立性が保たれてい…

SICP 読書ノート#6 - 2.1.4 区間算術演算 (pp.52-54)

「§2.1.4 拡張問題:区間算術演算」から。 なんというか、この章はひたすら数学。。。 問題 2.7 (define (make-interval a b) (cons a b)) (define (upper-bound i) (max (car i) (cdr i))) (define (lower-bound i) (min (car i) (cdr i))) 問題 2.8 減算手…

SICP 読書ノート#5 - 2.1 データ抽象入門 (pp.45-52)

「§2.1 データ抽象入門」から データ抽象とは かんたんに言うと、データ構造を階層化して抽象化しましょうってことかな? 公認インターフェース(conventional interface)とかデータ主導プログラミング(data-directed programming)とか聞き慣れない用語が。後…

SICP 読書ノート#4 - 1.3 高階手続きによる抽象 (pp.31-44)

§1.3 「高階手続きによる抽象」から 高階手続きとは 引数に手続きをとり戻値で手続きを返す手続き。これをつかうことで言語の表現力が大幅に広がる。 全部解くパワーはなかったので、数学っぽいものはパスして、高階手続きに関する問題だけをチョイスした。 …

SICP 読書ノート#3 - 1.2 手続きとその生成するプロセス(pp.5-30)

作用的順序と正規的順序 正規的順序 (normal-order evaluation) : 値が必要になるため被演算子を評価しない 作用的順序 (applicative-order evalutation) : 関数の引数に演算子と被演算子を含む場合、先に評価する 問題 1.5 Scheme解釈系が正規的順序が作用…

SICP 読書ノート#2 - 1.1 名前と環境 (pp.1-4)

名前と環境 変数に名前をつける手段(関数とは書いていない)として define がある。原文を引用。 A critical aspect of a programming language is the means it provides for using names to refer to computational objects. We say that the name identi…

SICP 読書ノート#1 - 僕がSICPを読み始めた理由

先週から「計算機プログラムの構造と解釈」という本を読んでいます。超有名な本なので説明は不要かと思いますが:) 計算機プログラムの構造と解釈 - Wikipedia 計算機プログラムの構造と解釈作者: ジェラルド・ジェイサスマン,ジュリーサスマン,ハロルドエイ…

計算機プログラムの構造と解釈(SICP)で計算機科学を学ぼう

計算機プログラムの構造と解釈作者: ジェラルド・ジェイサスマン,ジュリーサスマン,ハロルドエイブルソン,Gerald Jay Sussman,Julie Sussman,Harold Abelson,和田英一出版社/メーカー: ピアソンエデュケーション発売日: 2000/02メディア: 単行本購入: 35人 …