2010/03/24

Re:filter*

こんな感じで↓。
; filter*
(use srfi-1)
(define (filter* pred? ls)
(fold-right (lambda (e acc)
(let/cc skip
(cons (if (pair? e)
(filter* pred? e)
(if (pred? e)
e
(skip acc)))
acc)))
'() ls))
(filter* number? '(1 2 (3 a) (b 4)))
; -> (1 2 (3) (4))
(define (filter* pred? ls)
(fold-right (lambda (e acc)
(call/cc
(lambda (skip)
(cons (if (pair? e)
(filter* pred? e)
(if (pred? e)
e
(skip acc)))
acc))))
'() ls))
(filter* number? '(1 2 (3 a) (b 4)))
; -> (1 2 (3) (4))

お陰さまでかなりすっきりしました(笑)

0 件のコメント:

コメントを投稿