Scheme

SICP 2.64

quotientって何だろ?ってずっと考えてたけど、ただの割り算であることに気がついた。

SICP 2.63

木は苦手だが、そんなこと言ってちゃいかん。

SICP 2.59

例題のテーマ選びが秀逸だ。

SICP 2.60

(define (element-of-set? x set) ; 元の定義と同じ (if (null? set) #f (or (equal? x (car set)) (element-of-set? x (cdr set))))) (define (adjoin-set x set) (cons x set)) (define (union-set s1 s2) (append s1 s2)) (define (intersection-set s1 s…

SICP 2.61

データの表現方法は色々だけど、手続きによって抽象化してやれば外からは同じように使える。ただし、データの表現方法に応じて計算量に大きな違いが出たりするので工夫のしどころだよ、というわけだ。

SICP 2.62

楽しいのぅ。

SICP 2.56

記号微分。面白いテーマだ。こんなことができるなんてすごい。

SICP 2.57, 2.58

そのうち解く。

SICP 2.52a

waveに顔を書いた。そんだけ。

SICP 2.52b

問題文が意味不明だと思ったら誤訳だった。right-splitとup-splitで画像を2個並べるんじゃなくて1個だけにしてみよ、というのが題意。

SICP 2.52c

大きい顔を四隅に持って来いと。

SICP 2.53

等価性って難しいね。何となくやってるとわからない部分が出てきそう。

SICP 2.54

equal?を実装する。たしかLittle Schemerあたりに出てた。

SICP 2.55

Haskellではクオートなんて気にしたことがなかったな。Lisp固有の概念かもしれぬ。

SICP 2.50

transform-painterが定義済みという前提で解答するのはとても簡単。transform-painterを作るのは難しい。

SICP 2.51

2つのpainterをどうやって重ね合わせたらいいのかと思ったら、続けて呼び出せば良いだけだった。

SICP 2.45

↓letの位置を前の方に持ってきたら再帰呼び出しのネストが深すぎるって怒られた。何でだろう? (define (split f1 f2) (let ((smaller ((split f1 f2) painter (- n 1)))) (lambda (painter n) (if (= n 0) painter (f1 painter (f2 smaller smaller))))))

SICP 2.46

何だ、図形言語と関係ないじゃないか。

SICP 2.47

お絵書きは出てこない。

SICP 2.48

前に解いたような問題だな。相変わらず図形はなし。

SICP 2.49

MIT-Schemeだとちょっと想定と違う動きをしてはまった。コードはMIT-Schemeで動くように書いたので、SICP的な正解とは違うかもしれない。 想定と違うところ1 hend.scmだとframe-origin, frame-edge1, frame-edge2がそれぞれorigin-frame, edge1-frame, edge2…

SICP 2.44

besideとbelowの引数の順序がややこしいが、問題そのものは簡単だった。図形言語の仕組みはParsecを思わせる。

図形言語のための環境構築(Windows向け)

Windowsで図形言語を使うための環境として、MIT-Schemeを使うことにした。理由はセットアップが楽だから。何しろ6問しか練習問題がないので、環境構築に苦心する意味はない。私はここに書いてある内容を参考にして、次のような作業を行った。

図形言語による図形の描画方法

こちらで構築したMIT-Schemeを使って、実際に図形を描画してみる。

SICP 2.40

面倒なのでsrfiを使うことにした。

SICP 2.41

mapのネストは何回見ても混乱する。式が入れ子になることも混乱を助長している。シェルのパイプのように見えると、私にとってわかりやすいのだが。

SICP 2.42

エイトクイーンが動いた。感激! empty-boardとsafe?とadjoin-positionを作れということは、内部データの形式は勝手に決めて構わないわけだ。

SICP 2.43

適当に8x7倍ぐらいかと思ったら全然違った。

図形言語

Windowsでやってる人はみんなはまる(と思われる)図形言語の環境。手軽にやるにはどうしたらいいだろうか?

SICP 2.33

accumulateってfoldlのことだよね?