(wat-aro)

生きてます

2015-10-01から1ヶ月間の記事一覧

SICP 問題 2.52

(make-segment (make-vect 0.582 0.657) (make-vect 0.640 0.857)) (make-segment (make-vect 0.640 0.857) (make-vect 0.575 1.000)) (make-segment (make-vect 0.419 1.000) (make-vect 0.354 0.857)) (make-segment (make-vect 0.354 0.857) (make-vect 0…

SICP 問題 2.51

(define (below painter1 painter2) (let* ((split-point (make-vect 0.0 0.5)) (paint-bottom (transform-painter painter1 (make-vect 0.0 0.0) (make-vect 1.0 0.0) split-point)) (paint-upper (transform-painter painter2 split-point (make-vect 1.0 …

SICP 問題 2.50

(define (flip-horiz painter) (transform-painter painter (make-vect 1.0 0.0) (make-vect 0.0 0.0) (make-vect 1.0 1.0))) (define (rotate180 painter) (transform-painter painter (make-vect 1.0 1.0) (make-vect 0.0 1.0) (make-vect 1.0 0.0))) (def…

SICP 問題 2.49

;; a (define (outline-painter frame) (let* ((v00 (make-vect 0 0)) (v01 (make-vect 0 1)) (v10 (make-vect 1 0)) (v11 (make-vect 1 1))) ((segments->painter (list (make-segment v00 v01) (make-segment v00 v10) (make-segment v10 v01) (make-segme…

SICP 問題2.48の訳が変

線分をvectorで定義して構成子と選択子を定義するって問題やっていた. 問題文には 平面上の有向線分はベクタの対ーー原点から線分の始点へ向かうベクタと,始点から線分の終点へ向かうベクターーで表現される. [中略] この線分の表現をmake-segmentと選択…

SICP 問題 2.48

(define (make-segment v1 v2) (make-vect v1 v2)) (define (start-segment seg) (car seg)) (define (end-segment seg) (cdr seg))

SICP 問題 2.47

;; listでmake (define (make-frame origin edge1 edge2) (list origin edge1 edge2)) (define (origin-frame frame) (car frame)) (define (edge1-frame frame) (cadr frame)) (define (edge2-frame frame) (caddr frame)) ;; consでmake (define (make-fra…

SICP 問題 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…

SICP 問題 2.45

(define (split first second) (lambda (painter n) (if (= n 0) painter (let ((smaller ((split first second) painter (- n 1)))) (first painter ((second smaller smaller)))))))

SICP 問題 2.44

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

SICP 問題 2.43

(define (queens board-size) (define (queen-cols k) (if (= k 0) (list empty-board) (filter (lambda (positions) (safe? k positions)) (flatmap (lambda (rest-of-queens) (map (lambda (new-row) (adjoin-position new-row k rest-of-queens)) (enumer…

SICP 問題 2.42

(define (queens board-size) (define (queen-cols k) (if (= k 0) (list empty-board) (filter (lambda (positions) (safe? k positions)) (flatmap (lambda (rest-of-queens) (map (lambda (new-row) (adjoin-position new-row k rest-of-queens)) (enumer…

SICP 問題 2.41

(define (equal-sum-of-unique-trio n s) (filter (lambda (l) (= s (+ (car l) (cadr l) (caddr l)))) (flatmap (lambda (i) (flatmap (lambda (j) (map (lambda (k) (list i j k)) (enumerate-interval 1 (- j 1)))) (enumerate-interval 1 (- i 1)))) (en…

SICP 問題 2.40

(define (unique-pairs n) (flatmap (lambda (i) (map (lambda (j) (list i j)) (enumerate-interval 1 (- i 1)))) (enumerate-interval 1 n))) (define (prime-sum-pairs n) (map make-pair-sum (filter prime-sum? (unique-pairs n))))

SICP 問題 2.39

(define (fold-left op initial sequence) (define (iter result rest) (if (null? rest) result (iter (op result (car rest)) (cdr rest)))) (iter initial sequence)) (define (fold-right op initial sequence) (if (null? sequence) initial (op (car s…

SICP 問題 2.38

(define (fold-left op initial sequence) (define (iter result rest) (if (null? rest) result (iter (op result (car rest)) (cdr rest)))) (iter initial sequence)) (define (fold-right op initial sequence) (if (null? sequence) initial (op (car s…

SICP 問題 2.37

(define (dot-product v w) (accumulate + 0 (map * v w))) (define (matrix-*-vector m v) (map (lambda (x) (dot-product x v)) m)) (define (transpose mat) (accumulate-n cons nil mat)) (define (matrix-*-matrix m n) (let ((cols (transpose n))) (m…

schemeでmapを書いてみた

SICPの問題 2.37をやろうとしたところ,この本で定義した一つのリストのみに対応したmapではなく 複数のリストに対応したmapが必要だったので自分で書いてみました. (define (foldr op init lst) (if (null? lst) init (op (car lst) (foldr op init (cdr l…

SICP 問題 2.36

;; accumulate (define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) ;; accumulate-n (define (accumulate-n op init seqs) (if (null? (car seqs)) nil (cons (accumula…

SICP 問題 2.35

;;accumulate (define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) ;;enumerate-tree (define (enumerate-tree tree) (cond ((null? tree) nil) ((not (pair? tree)) (li…

SICP 問題 2.34

(define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) (define (horner-eval x coefficient-sequence) (define (iter lis res) (cond ((null? lis) res) (else (iter (cdr…

SICP 問題 2.33

accumulateを使ってmap,append,lengthを実装する. (define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) (define (map p sequence) (accumulate (lambda (x y) (cons (p …

SICP 問題 2.32

(define (subsets s) (if (null? s) (list nil) (let ((rest (subsets (cdr s)))) (append rest (map (lambda (x) (cons (car s) x)) rest))))) ;;この式はまず最後まで再帰し,そこでrestに空リストを持って返ってくる. ;;mapでcarとrestをconsして新しい…

SICP 問題 2.31

(define (tree-map fn tree) (map (lambda (sub-tree) (if (pair? sub-tree) (tree-map fn sub-tree) (fn sub-tree))) tree)) (define (sqaure x) (* x x)) (define (square-tree tree) (tree-map square tree))

SICP 問題 2.30

(define (square-tree tree) (cond ((null? tree) nil) ((not (pair? tree)) (* tree tree)) (else (cons (square-tree (car tree)) (square-tree (cdr tree)))))) (define (square-tree tree) (map (lambda (sub-tree) (if (pair? sub-tree) (square-tree s…

SICP 問題 2.29

(define (make-mobile left right) (list left right)) (define (make-branch length structure) (list length structure)) ;; a (define (left-branch mobile) (car mobile)) (define (right-branch mobile) (car (cdr mobile))) (define (branch-length br…

SICP 問題 2.28

(define x (list (list 1 2) (list 3 4))) (define (fringe l) (cond ((null? l) nil) ((pair? (car l)) (append (fringe (car l)) (fringe (cdr l)))) (else (cons (car l) (fringe (cdr l)))))) gosh> (fringe x) (1 2 3 4) gosh> (fringe (list x x)) (1 …

SICP 問題 2.27

(define x (list (list 1 2) (list 3 4))) (define (reverse items) (if (null? items) items (append (reverse (cdr items)) (list (car items))))) (define (deep-reverse items) (cond ((null? items) nil) ((pair? items) (append (deep-reverse (cdr it…

SICP 問題 2.26

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

SICP 問題2.25

(1 3 (5 7) 9) (car (cdr (car (cdr (cdr))))) ((7)) (car (car )) (1 (2 (3 (4 (5 (6 7)))))) (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr )))))))))))) gosh> (car (cdr (car (cdr (cdr '(1 3 (5 7) 9)))))) 7 gosh> (car (car '((7))))…