# 练习2.41-练习2.47

1.练习2.41

(define (seprate-except x except)
(filter (lambda (couple)
(let ((first (car couple))
(second (cadr couple)))
(and (not (= first except))
(not (= second except))
(not (= first second)))))
(map (lambda (n) (list n (- x n)))
(enumerate-interval 1 (- x 1)))
)
)

(define (flatmap proc seq)
(accumulate append '() (map proc seq)))

(define (seprate-to-three n)
(flatmap (lambda (x)
(map (lambda (y) (cons x y))
(seprate-except (- n x) x)))
(enumerate-interval 1 (- n 1)))
)

2.练习2.42

(define empty-board '())

(define (adjoin-position new-row k rest-of-queens)
(cons (list k new-row) rest-of-queens))

(define (safe? k positions)
(define (check-safe col row rest-positions)
(if (null? rest-positions)
true
(let ((first-position-col (car (car rest-positions)))
(first-position-row (cadr (car rest-positions)))
(remain-positions (cdr rest-positions)))
(and (not (= col first-position-col))
(not (= row first-position-row))
(not (= (abs (- col first-position-col))
(abs (- row first-position-row))))
(check-safe col row remain-positions)))))
(if (null? positions)
true
(let ((col (car (car positions)))
(row (cadr (car positions)))
(rest (cdr positions)))
(if (null? rest)
true
(check-safe col row rest)))))

3.练习2.43

4.练习2.44

(require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1)))

(define (up-split painter n)
(if (= n 0)
painter
(let ((smaller (up-split painter (- n 1))))
(below painter (beside smaller smaller)))))

5.练习2.45

(define (split action1 action2)
(lambda (painter n)
(if (= n 0)
painter
(let ((smaller ((split action1 action2) painter (- n 1))))
(action1 painter (action2 smaller smaller))))))

6.练习2.46
(define (make-vect x y)
(cons x y))

(define (xcor-vect v)
(car v))

(define (ycor-vect v)
(cdr v))

(define (add-vect v1 v2)
(make-vect (+ (xcor-vect v1)
(xcor-vect v2))
(+ (ycor-vect v1)
(ycor-vect v2))))

(define (sub-vect v1 v2)
(make-vect (- (xcor-vect v1)
(xcor-vect v2))
(- (ycor-vect v1)
(ycor-vect v2))))

(define (scale-vect v s)
(make-vect (* s (xcor-vect v))
(* s (ycor-vect v))))
7.练习2.47

(define (make-frame-list origin edge1 edge2)
(list origin edge1 edge2))

(define (make-frame-cons origin edge1 edge2)
(cons origin (cons edge1 edge2)))

(define (origin-frame-list frame)
(car frame))

(define (edge1-frame-list frame)
(cadr frame))

(define (edge2-frame-list frame)
(caddr frame))

(define (origin-frame-cons frame)
(car frame))

(define (edge1-frame-cons frame)
(cadr frame))

(define (edge2-frame-cons frame)
(cddr frame))

05-18 229                                                                  08-12 1796
01-17 810
07-19 8248
05-06 813
10-21 150
02-13 139
06-03 1701
12-11 5430
12-11 4717
10-15 263
05-29 2202
04-01 4万+
11-13
04-17
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客