2008-07-05から1日間の記事一覧

練習問題 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」を買ったので、早速読む。 わからないところは本当にわからない、 何回か読んでいると分かるようになる。凄い新鮮やな。