(wat-aro)

生きてます

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

SICP 問題 2.24

SICP 問題 2.23

(define (for-each proc items) (cond ((null? items) 'done) (else (proc (car items)) (for-each proc (cdr items))))) gosh> (for-each (lambda (x) (newline) (display x)) (list 57 321 88)) 57 321 88done

SICP 問題 2.22

(define (square-list items) (define (iter things answer) (if (null? things) answer (iter (cdr things) (cons (square (car things)) answer)))) (iter items nil)) ;; iter内でのconsで(square (car things))とanswerを引数として取っている. ;; この…

SICP 問題 2.21

(define (square-list items) (if (null? items) nil (cons (* (car items) (car items)) (square-list (cdr items))))) (define (square-list items) (map (lambda (x) (* x x)) items))

SICP 問題 2.20

(define (same-parity x . y) (define (recur lis pred?) (cond ((null? lis) nil) ((pred? (car lis)) (cons (car lis) (recur (cdr lis) pred?))) (else (recur (cdr lis) pred?)))) (cons x (recur y (if (odd? x) odd? even?)))) gosh> (same-parity 1 2…

SICP 問題 2.19

(define (cc amount coin-values) (cond ((= amount 0) 1) ((or (< amount 0) (no-more? coin-values)) 0) (else (+ (cc amount (except-first-denomination coin-values)) (cc (- amount (first-denomination coin-values)) coin-values))))) (define first…

SICP 問題 2.18

(define (reverse items) (define (iter lis result) (if (null? lis) result (iter (cdr lis) (cons (car lis) result)))) (iter items nil))

SICP 問題 2.17

(define (last-pair items) (if (null? (cdr items)) items (last-pair (cdr items))))

SICP 問題 2.15

(define (par1 r1 r2) (div-interval (mul-interval r1 r2) (add-interval r1 r2))) (define (par2 r1 r2) (let ((one (make-interval 1 1))) (div-interval one (add-interval (div-interval one r1) (div-interval one r2))))) par1には不確かな数(r1,r2)…

SICP 問題 2.14

(define (par1 r1 r2) (div-interval (mul-interval r1 r2) (add-interval r1 r2))) (define (par2 r1 r2) (let ((one (make-interval 1 1))) (div-interval one (add-interval (div-interval one r1) (div-interval one r2))))) gosh> (define small (make-…

SICP 問題 2.12

(define (make-center-width c w) (make-interval (- c w) (+ c w))) (define (center i) (/ (+ (lower-bound i) (upper-bound i)) 2)) (define (width i) (/ (- (upper-bound i) (lower-bound i)) 2)) (define (make-center-percent c p) (make-interval c …

SICP 問題 2.11

(define (div-interval x y) (let *1 (upx (upper-bound x)) (lowy (lower-bound y)) (upy (upper-bound y))) (cond lowx 0) ;;xは正 (cond ((> lowy 0) ;;yは正 (make-interval ( lowx lowy) ( upx upy))) ((< upy 0) ;;yは負 (make-interval ( upx upy) ( …

SICP 問題 2.10

;; y が0をまたがる区間の時はエラーを返す (define (div-interval x y) (if (> 0 (* (lower-bound y) (upper-bound y))) (error "error") (mul-interval x (make-interval (/ (upper-bound y)) (/ (lower-bound y))))))

SICP 問題 2.8

(define (upper-bound x) (cdr x)) (define (lower-bound x) (car x)) (define (sub-interval x y) (make-interval (- (upper-bound x) (lower-bound y)) (- (upper-bound y) (lower-bound x))))

SICP 問題 2.7

(define (make-interval a b) (cons a b)) (define (upper-bound x) (if (> (car x) (cdr x)) (car x) (cdr x))) (define (lower-bound y) (if (< (car y) (cdr y)) (car y) (cdr y)))

SICP 問題 2.6

(define zero (lambda (f) (lambda (x) x))) (define (add-1 n) (lambda (f) (lambda (x) (f ((n f) x))))) (add-1 zero) (lambda (f) (lambda (x) (f (((lambda (f) (lambda (x) x)) f) x)))) (lambda (f) (lambda (x) (f ((lambda (x) x) x)))) (lambda (f…

SICP 問題 2.5

(define (cons a b) (* (expt 2 a) (expt 3 b))) (define (car c) (define (iter n count) (if (< 0 (remainder n 2)) count (iter (/ n 2) (+ count 1)))) (iter c 0)) (define (cdr c) (define (iter n count) (if (< 0 (remainder n 3)) count (iter (/ n…

SICP 問題 2.4

(define (cons x y) (lambda (m) (m x y))) (define (car z) (z (lambda (p q) p))) ;; (car (cons x y)) (car (cons x y)) ((lambda (m) (m x y)) (lambda (p q) p)) ((lambda (p q) p) x y) x ;; cdr (define (cdr z) (lambda (p q) q))

SICP 問題 2.3

;; 長方形を高さと幅で定義 (define (make-rectangle height width) (cons height width)) (define (perimeter-rect rect) (+ (* 2 (height-rect rect)) (* 2 (width-rect rect)))) (define (area-rect rect) (* (height-rect rect) (width-rect rect))) (de…

SICP 問題 2.2

(define (make-segment start end) (cons start end)) (define (start-segment seg) (car seg)) (define (end-segment seg) (cdr seg)) (define (make-point x y) (cons x y)) (define (x-point point) (car point)) (define (y-point point) (cdr point)) (…

[SICP]SICP 問題 2.1

負の引数に対応したmake-rat (define (make-rat n d) (let* ((g (gcd n d)) (n1 (/ n g)) (d1 (/ d g))) (if (< d1 0) (cons (* -1 n1) (* -1 d1)) (cons n1 d1))))

SICP 問題1.46

(define (iterative-improve enough? improve) (lambda (guess) (define (iter guess) (if (enough? guess) (improve guess) (iter (improve guess)))) (iter guess))) (define (sqrt x) (define (improve guess) (average guess (/ x guess))) (define (goo…

SICP 問題1.45

;;実験用に作った手続き ;; x^n k回平均緩和 (define (test x n k) (fixed-point-of-transform (lambda (y) (/ x (expt y (- n 1)))) (lambda (z) ((repeated average-damp k) z)) 1.0)) 実験の結果, 2 ≦ n < 4 の時 k=1 4 ≦ n < 8 の時 k=2 8 ≦ n < 16 の…

SICP 問題1.44

平滑化関数とn重平滑化関数 (define (smooth f) (let ((dx 0.0001)) (lambda (x) (/ (+ (f (- x dx)) (f x) (f (+ x dx))) 3)))) (define (n-fold-smooth f n) (lambda (x) ((repeated smooth n) x)))

SICP 問題1.43

関数fをn回作用を計算する手続きrepeated (define (repeated f n) (define (iter fn count) (if (= count n) fn (iter (compose f fn) (+ count 1)))) (iter f 1)) gosh> ((repeated inc 5) 0) 5

SICP 問題1.42

合成関数を実装する手続きcompose (define (compose f g) (lambda (x) (f (g x)))) gosh> ((compose square inc) 6) 49

SICP 問題1.41

(define (inc n) (+ 1 n)) (define (double f) (lambda (x) (f (f x)))) (define D double) (define DD (D D)) (((D (D D)) inc) 5) (((D DD) inc) 5) ((DD (DD inc)) 5) ((DD (D (D inc)))) ((D (D (D (D inc)))) 5) ((D (D (D (lambda (x) (+ 2 x))))) 5) …

SICP 問題1.40

(define (cubic a b c) (lambda (x) (+ (cube x) (* a (square x)) (* b x) c))) gosh> (newtons-method (cubic 3 3 1) 1) -0.9999755158323895

SICP 問題1.39

(define (tan-cf x k) (cont-frac (lambda (i) (if (= i 1) x (- (square x)))) (lambda (i) (- (* 2.0 i) 1.0)) k))

SICP 問題1.38

(define (e-2 k) (cont-frac (lambda (i) 1.0) (lambda (i) (if (= (modulo i 3) 2) (* 2 (+ 1 (quotient i 3))) 1.0)) k))