2008-07-01から1ヶ月間の記事一覧

練習問題 P.112 delete-1

どう考えてよいかよく分からんかった。 苦肉の策として、 ・リストの最後まできたら 削除する要素がないということなので、元のリストをそのまま返す ・一致する要素が見つかったら、その要素を除いた新しいリストを作る という実装にしてみました。 9章は…

練習問題 P.101 any-pred, every-pred

any-pred は1つでも真になれば #t 真の要素が見つからないまま、リストの最後になれば#f every-pred は1つでも真になれば #f 真の要素が見つからないまま、リストの最後になれば#t (ただし、最初から空リストなら #f) と思ったが、 それは前のページで説明…

練習問題 P.68 numbers-only

(define (filter (proc lis)) (cond ((null? lis) lis) (pred (car lis)) (cons (car lis) (filter proc (cdr lis))) (else (filter proc (cdr lis))))) (define (for-each-numbers (proc lis)) (for-each proc (filter numbers? lis))) (define (map-number…

練習問題 P.69 numbers-only-for-tree

(numbers-only for-each)や(numbers-only map)で入れ子のリストを処理できるか? → できない 理由: 例えば入れ子のリストの '(1 2 3 (4 5) 6) の 4番目の要素 '(4 5) は数値ではなく、リストであるから walker が満たすべき条件: 入れ子のリストの中も処…

練習問題 P.50

gosh> (fold cons '() '(a b c d e)) (e d c b a) リストの要素が逆になる。 init が proc の2番目の引数になるのがポイントになっている。

練習問題 P.53 deep-copy-list

ネストしたリストも全てコピーするって、copy-list でも出来ていると思うんやけど.. (define (deep-copy-list lis) (if (pair? lis) (cons (deep-copy-list (car lis)) (deep-copy-list (cdr lis))) #?=lis)) ネストされているのも含めて全ての要素が最後の…

練習問題 P.56 length

(define (length lis) (if (pair? lis) (+ 1 (length (cdr lis))) 0)) ついでにネストされている要素の数も (define (deep-length lis) (cond ((null? lis) 0) ((pair? lis) (+ (deep-length (car lis)) (deep-length (cdr lis)))) (else 1)))

練習問題 P.56 filter

(define (filter pred lis) (cond ((null? lis) '()) ((pred (car lis)) (cons (car lis) (filter pred (cdr lis)))) (else (filter pred (cdr lis))))) 感覚がつかめてきた

練習問題 P.59 末尾再帰のreverse

(defile (reverse lis) (define (reverse-rec lis a) (if (null? lis) a (reverse-rec (cdr lis) (cons (car lis) a)))) (reverse-rec (cdr lis) (list (car lis)))) こういうイメージと思えば、そんなに難しくない for (split //, $lis) { $a = $_ . $a; } …

リスト操作の基本手続き

各データに対して、リスト操作の手続きをまとめてみた。 データ 例 pair? null? car cdr 空リスト '() × ○ ERROR ERROR リスト '(1 2 3) ○ × 1 '(2 3) リテラル 1 × × ERROR ERROR car や cdr は空リストやリテラルに適用するとエラーになるので、 事前に pa…

興味が散漫になっている

「プログラミングGauche」を買ったので、早速読む。 わからないところは本当にわからない、 何回か読んでいると分かるようになる。凄い新鮮やな。