SICP

SICP読書女子会#19 2.2.2

More than 1 year has passed since last update.

オンラインSICP読書女子会 #19 (2.2.2(2)) - connpass
SICP/2.2.2.scm at master · cocodrips/SICP

Ex 2.26

(display "==========Ex 2.26===========")
(newline)

(define x (list 1 2 3))
(define y (list 4 5 6))

(display (append x y)) (newline)    ;(1 2 3 4 5 6)      引数がlist
(display (cons x y)) (newline)      ;((1 2 3) 4 5 6)    引数なんでもいい
(display (list x y)) (newline)      ;((1 2 3) (4 5 6))  引数なんでもいい

Ex 2.27

(display "==========Ex 2.27===========")
(newline)
(define x (list 1 2))
(define y (list 3 4))
(define xylist (list x y))

(display xylist)
(newline)

(define (deep-reverse items)
    (define (itr src dist)
        (display src)
        (display "|")
        (display dist)
        (newline)
        (cond 
            ((null? src) dist)
            ((list? (car src)) (itr (cdr src) (cons (deep-reverse (car src)) dist)))
        (else   
            (itr (cdr src) (cons (car src) dist)))))
    (itr items (list)))

(display (deep-reverse xylist))
(newline)

Ex 2.28

(display "==========Ex 2.28===========")
(newline)

(define (fringe items)
    (define (itr src dist)
        (display src)
        (display "|")
        (display dist)
        (newline)
        (cond 
            ((null? src) dist)
            ((list? (car src)) 
                (itr (cdr src) (itr (car src) dist)))
        (else
            (itr (cdr src) (cons (car src) dist)))))
    (reverse (itr items (list))))

(define x (list (list 1 2) (list 3 4)))
(display (fringe x))
(newline)

(display (fringe (list x x)))
(newline)

Ex 2.29

(display "==========Ex 2.29===========")
(newline)

; 二枝モビール
; a.
(define (make-mobile left right)
    (list left right))

(define (left-branch mobile)
    (car mobile))

(define (right-branch mobile)
    (car (cdr mobile)))

(display "a.")
(newline)

(define m (make-mobile 1 2))
(display "Base:")
(display m)
(newline)

(display "left: ")
(display (left-branch m))
(newline)

(display "right: ")
(display (right-branch m))
(newline)
;a.
;Base:(1 2)
;left: 1
;right: 2


; b.
(display "b.")
(newline)

(define m (make-mobile 1 2))
(define (total-weight mobile)
    (if (list? mobile)
        (+ (total-weight (left-branch mobile)) (total-weight (right-branch mobile)))
        mobile))

(define m (make-mobile (make-mobile 3 5) 2))
(display "Base:")
(display m)
(newline)
(display "Weight:")
(display (total-weight m))
(newline)

;b.
;Base:((3 5) 2)
;Weight:10

(display "c.")
(newline)

(define (balance? mobile)
    (= (total-weight (left-branch mobile)) (total-weight (right-branch mobile))))

(display m)
(display ":")
(display (balance? m)) 
(newline)

(define m (make-mobile (make-mobile 3 5) (make-mobile 2 6)))
(display m)
(display ":")
(display (balance? m)) 
(newline)
;c.
;((3 5) 2):#f
;((3 5) (2 6)):#t


(display "d.")
(newline)

(define (make-mobile left right) (cons left right))
(define (make-branch length structure)
    (cons length structure))

(define m (make-mobile 1 (make-mobile 2 3)))
(display m)
(newline)

; make-branchがよくわからない