2010/03/25

filter-break

ストlisと述語手続きpredを取り、lisの各要素に順にpredを適用して、 predが真の値を返したら直ちにその要素を返すような関数find
; filter-break
(define (filter-break pred? ls)
(if (null? ls)
#f
(if (pred? (car ls))
(car ls)
(filter-break pred? (cdr ls)))))
(filter-break odd? '(2 2 2 3 4 4 4))
; -> 3
(define (filter-break pred? ls)
(let/cc skip
(fold (lambda (e r)
(if (pred? e)
(skip e)
r))
#f ls)))
(filter-break odd? '(2 2 2 3 4 4 4))
; -> 3

The Seasoned Schemer

0 件のコメント:

コメントを投稿