(wat-aro)

生きてます

2015-11-19から1日間の記事一覧

SICP 問題 3.21

(define (front-ptr queue) (car queue)) (define (rear-ptr queue) (cdr queue)) (define (set-front-ptr! queue item) (set-car! queue item)) (define (set-rear-ptr! queue item) (set-cdr! queue item)) (define (empty-queue? queue) (null? (front-pt…

SICP 問題 3.19

答え見た. https://github.com/nomnel/SICP/blob/master/3/19.scm 一歩ずつ進むポインタと二歩ずつ進むポインタが同じになれば循環している. うまいこと考えてるな. (define (look-check x) (define (check x0 x1) (cond ((eq? x0 x1) #t) ((null? (cdr x1…

SICP 問題 3.18

;; 循環するリストを見つける手続き (define (cycle? x) (let recur ((x x) (record '())) (cond ((not (pair? x)) #f) ((memq x record) #t) (else (or (recur (car x) (cons x record)) (recur (cdr x) (cons x record)))))))

SICP 問題 3.17

任意の構造の異なる対の個数を返すcount-pairsを完成させる. (define (count-pairs x) (define pair-list '()) (define (recur s) (cond ((not (pair? x)) 0) ((memq s pair-list) 0) (else (set! pair-list (cons s pair-list)) (+ (recur (car x)) (recur…

SICP 問題 3.16

ポインタが同じ構造を指していた場合に重複して数えてしまう. さらに,循環リストの場合は結果が返ってこない. (define (count-pairs x) (if (not (pair? x)) 0 (+ (count-pairs (car x)) (count-pairs (cdr x)) 1)))

SICP 問題 3.15

(define x (list 'a 'b)) (define z1 (cons x x)) (define z2 (cons (list 'a 'b) (list 'a 'b))) (define (set-to-wow! x) (set-car! (car x) 'wow) x) (set-to-wow! z1)と(set-to-wow! z2)の結果の箱とポインタ図

SICP 問題 3.14

mysteryはreverseと同じ結果を返し,xを先頭の要素だけを取り出したリストに置き換える. (define (mystery x) (define (loop x y) (if (null? x) y (let ((temp (cdr x))) (set-cdr! x y) (loop temp x)))) (loop x '()))

SICP 問題 3.13

(define (make-cycle x) (set-cdr! (last-pair x) x) s) (define z (make-cycle (list 'a 'b 'c))) zのポインタ図. (last-pair z)を計算しようとするとlast-pair?が#tになることがないので終わらない.

SICP 問題 3.12

SICP 問題 3.10

(define w1 (make-withdraw 100)) ;; E2(balance:100)->E1(initial-amount:100)->global (w1 50) ;; E3->(amount:50)->E2(balance:50)->E1(initial-amount:100)->global (define (w2 (make-withdraw 100))) ;; E5(balance:100)->E4(initial-amount:100)->glo…

SICP 問題 3.09

階乗を計算する手続き(factorial 6)の環境構造を示す. 再帰 (define (factorial n) (if (= n 1) 1 (* n (factorial (- n 1))))) 反復 (define factorial (lambda (n) (fact-iter 1 1 n))) (define fact-iter (lambda (product counter max-count) (if (> co…