HOME ゲストブック 書き込み一覧 返事を書く

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
フォローアップ: