2010/02/24

TSS member?

listの中に指定した要素が入ってるかどうかっていうあれです。
letrec の使われ方が微妙に新鮮だったりする。
使われ方というか位置というか。

; member?
; The Little Schemer
(define member?
(lambda (a lat)
(cond ((null? lat) #f)
((eq? a (car lat)) #t)
(else (member? a (cdr lat))))))
(member? 'b '(a b c))
(member? 'd '(a b c))
(define member?
(lambda (a lat)
(cond ((or (null? lat)
(not (eq? a (car lat)))) #f)
(else (member? a (cdr lat))))))
(member? 3 '(1 2 3 4 5))
(member? 6 '(1 2 3 4 5))
; and or
(define (member? a lat)
(and (not (null? lat))
(or (eq? a (car lat))
(member? a (cdr lat)))))
(member? 'c '(a b c d e f))
(member? 1 '(a b c d e f))
; any
(use srfi-1)
(define (member? a lat)
(any (lambda (e)
(eq? e a))
lat))
(member? 'a '(a b c))
(member? 'd '(a b c))
; The Seasoned Schemer
(define member?
(lambda (a lat)
((letrec ((yes? (lambda (l)
(cond ((null? l) #f)
((eq? a (car l)) #t)
(else (yes? (cdr l)))))))
yes?)
lat)))
(member? 'a '(a b c))
(member? 'd '(a b c))
(define member?
(lambda (a lat)
(letrec ((yes? (lambda (l)
(cond ((null? l) #f)
((eq? a (car l)) #t)
(else (member? a (cdr l)))))))
(yes? lat))))
(member? 'a '(a b c))
(member? 'd '(a b c))

The Seasoned Schemer

0 件のコメント:

コメントを投稿