LoginSignup
1
0

More than 5 years have passed since last update.

SICP読書女子会#19 2.2.2

Posted at

オンライン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がよくわからない

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0