match.scm
30分プログラム、その36。
util.matchを試してみよう。
(use util.match) (define head (match-lambda ((x . _ ) x))) (define tail (match-lambda ((_ . xs) xs))) (define fact (match-lambda (0 1) (n (* n (fact (- n 1)))))) (define (my-map f lst) (match lst (() ()) ((x . xs) (cons (f x) (my-map f xs))))) (define (my-append lst ys) (match lst (() ys) ((x . xs) (cons x (my-append xs ys))))) (define (my-filter p lst) (match lst (() ()) ((x . xs) (if (p x) (cons x (my-filter p xs)) (my-filter p xs))))) (define (my-fold-right f init lst) (match lst (() init) ((x . xs) (f x (my-fold-right f init xs)))))
- なんか再実装祭りになった
- fold-leftの実装を忘れた