2008-04-14から1日間の記事一覧

Ex 2.24

解釈系が表示するのは (1 (2 (3 4)))。うーん、アスキーアートで絵を描くのはつらいなあ…とりあえず略。今日はここまでとしよう。 - で翌日なわけだが描いてみる。 (1 (2 (3 4))) -> ((2 (3 4))) -> nil | | 1 (2 (3 4)) -> ((3 4)) -> nil | | 2 (3 4) -> (…

Ex 2.23

map そのものじゃ、ダメなのかな? (map (lambda (x) (newline) (display x)) (list 1 2 3)) 1 2 3 ; value 22: (#!unspecific #!unspecific #!unspecific) ってんで題意を満たしている、気がする。一方、 (define (for-each f xs) (if (null? xs) true ((f …

Ex 2.22

説明せよ系の問題は苦手だな…。最初の定義だと空リストに、順次リストの際左端の要素から cons していくために逆順になってしまう。 (list 1 2 3 ...) というのから (... (cons 3 (cons 2 (cons 1 (nil)))) ) と作り上げてしまう。他方の定義では、リスト構…

Ex 2.21

あ、これは簡単... (define (square-list items) (if (null? items) '() (cons (square (car items)) (square-list (cdr items))))) そして (define (square-list items) (map square items)) だ。

Ex 2.20

ううーん、おもったより時間がかかってしまった。 (define (same-parity x . xs) (define (filtered xs) (cond ((null? xs) xs) ((= (modulo x 2) (modulo (car xs) 2)) (cons (car xs) (filtered (cdr xs)))) (cons x (filtered xs))) (filtered xs) を計算…

Ex 2.19

(define (first-denomination coins) (car coins)) (define (except-first-denomination coins) (cdr coins)) (define (no-more? coins) (null? coins)) リスト内のコインの順序は cc の答えに影響しない。というのは、リストの先頭のコインから、それを使う…

Ex 2.18

(define (reverse xs) (if (null? xs) '() (append (reverse (cdr xs)) (list (car xs))))) なんか append を使うのは反則な気がしなくもない。

Ex 2.17

いきなり設問をがっと飛ばす。 (define (last-pair xxs) (let ((xs (cdr xxs))) (if (null? xs) xxs (last-pair xs)))) let を使わないほうが読みやすいだろうか?

Ex 2.6

こういうのは思考の順序をメモしておく価値がある、気がする。 (define zero (lambda (f) (lambda (x) x))) この定義によれば zero は一引数の手続きで、受け取った引数を無視して「値をそのまま返す手続き」を返す。でもって一加える次の手続き定義は... (d…

Ex 2.5

パス

Ex 2.4

証明...?置き換えを愚直に示せばいいんだろうか? (car (cons x y)) の cons について問題にある定義を適用すると、 (car (lambda (m) (m x y))) 続いて car の定義を適用する...と、 ((lambda (m) (m x y)) (lambda (p q) p)) 先の lambda 式の引数に値を…

Ex 2.3

ごめん。 回転とか考えると長方形ってなんか難しい気がするのでパス。

Ex 2.2

(define (make-segment s e) (cons s e)) (define (start-segment s) (car s)) (define (end-segment s) (cdr s)) (define (make-point x y) (cons x y)) (define (x-point p) (car p)) (define (y-point p) (cdr p)) (define (midpoint-segment s) (define …

Ex 2.1

(define (make-rat n d) (define (sign x) (if (< x 0) -1 1)) (let ((g (gcd n d))) (cons (* (sign (* n d)) (abs (/ n g))) (abs (/ d g))))) 汚いけど、ま、こんなもんでよろしかろうか。

計算機プログラムの構造と解釈

以前に挫折して、再挑戦中の SICP。 tumblr に書こうとしたら cocolog に三件書いたつもりが上書きしていて二件を台無しにしてしまい、 勢いではてなにアカウントを作ってみた。とりあえず答えたい問題にのみ答えていくという (自分に甘い) シンプルルールで…