2507. Re. 2505 Re. 2504 Re. 2503 reverse...
亀田馬志 (Nov 28, 2009)
>>LOLOLさん。
まずはこんなモンかな。
(define (fileter pred ls)
(let loop ((ls0 ls) (ls1 '()))
(if (null? ls0)
(reverse ls1)
(let ((x (car ls0))
(y (cdr ls0)))
(loop y (call/cc
(lambda (break)
(cons (cond ((pair? x)
(fileter pred x))
((pred x)
x)
(else
(break ls1))) ls1))))))))
;;; 実行例
gosh> (define *ls* '(1 2 (3 a) (b 4)))
*ls*
gosh> (define *ls1* '(1 (2 a) (3 (b 4) 5) (6 (7 (c) 8) d) e))
*ls1*
gosh> (fileter number? *ls*)
(1 2 (3) (4))
gosh> (fileter number? *ls1*)
(1 (2) (3 (4) 5) (6 (7 () 8)))
gosh>
- 元ねた:
- 2505 Re. 2504 Re. 2503 reverse
- フォローアップ: