(wat-aro)

生きてます

2015-10-20から1日間の記事一覧

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 …