2008-07-01から1ヶ月間の記事一覧
どう考えてよいかよく分からんかった。 苦肉の策として、 ・リストの最後まできたら 削除する要素がないということなので、元のリストをそのまま返す ・一致する要素が見つかったら、その要素を除いた新しいリストを作る という実装にしてみました。 9章は…
any-pred は1つでも真になれば #t 真の要素が見つからないまま、リストの最後になれば#f every-pred は1つでも真になれば #f 真の要素が見つからないまま、リストの最後になれば#t (ただし、最初から空リストなら #f) と思ったが、 それは前のページで説明…
(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…
(numbers-only for-each)や(numbers-only map)で入れ子のリストを処理できるか? → できない 理由: 例えば入れ子のリストの '(1 2 3 (4 5) 6) の 4番目の要素 '(4 5) は数値ではなく、リストであるから walker が満たすべき条件: 入れ子のリストの中も処…
gosh> (fold cons '() '(a b c d e)) (e d c b a) リストの要素が逆になる。 init が proc の2番目の引数になるのがポイントになっている。
ネストしたリストも全てコピーするって、copy-list でも出来ていると思うんやけど.. (define (deep-copy-list lis) (if (pair? lis) (cons (deep-copy-list (car lis)) (deep-copy-list (cdr lis))) #?=lis)) ネストされているのも含めて全ての要素が最後の…
(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)))
(define (filter pred lis) (cond ((null? lis) '()) ((pred (car lis)) (cons (car lis) (filter pred (cdr lis)))) (else (filter pred (cdr lis))))) 感覚がつかめてきた
(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」を買ったので、早速読む。 わからないところは本当にわからない、 何回か読んでいると分かるようになる。凄い新鮮やな。