(define (fold c z xs)
(cond ((null? xs) z)
(else (fold c (c (car xs) z) (cdr xs)))))
(define (comp f g) (lambda (x)
(f (g x))))
(define (cons1 x) (lambda (y)
(cons x y)))
(define (filter p xs)
((fold (lambda (x k)
(if (p x) (comp k (cons1 x)) k))
(lambda (x) x)
xs)
'()))
(display (filter (lambda(x)(= (remainder x 2) 0)) (list 1 2 3 4 5)))
#|
(define (foldd c z xs)
(cond ((null? xs) (z '()))
(else (foldd c (c (car xs) z) (cdr xs)))))
(define (comp f g) (lambda (x) ; ((comp f g) x)
(f (g x))))
(define (cons1 x) (lambda (y) ; ((cons1 x) y)
(cons x y)))
(define (filter p xs)
(foldd (lambda (x k)
(if (p x) (comp k (cons1 x)) k))
(lambda (x) x)
xs))
(display (filter (lambda(x)(= (remainder x 2) 0)) (list 1 2 3 4 5)))
|#
KGRlZmluZSAoZm9sZCBjIHogeHMpCiAgIChjb25kICgobnVsbD8geHMpIHopCiAgICAgICAgIChlbHNlIChmb2xkIGMgKGMgKGNhciB4cykgeikgKGNkciB4cykpKSkpCiAKKGRlZmluZSAoY29tcCBmIGcpIChsYW1iZGEgKHgpCiAgKGYgKGcgeCkpKSkKIAooZGVmaW5lIChjb25zMSB4KSAobGFtYmRhICh5KQogIChjb25zIHggeSkpKQogCihkZWZpbmUgKGZpbHRlciBwIHhzKQogICgoZm9sZCAobGFtYmRhICh4IGspCiAgICAgICAgICAgKGlmIChwIHgpIChjb21wIGsgKGNvbnMxIHgpKSBrKSkKICAgICAgICAgKGxhbWJkYSAoeCkgeCkKICAgICAgICAgeHMpCiAgICcoKSkpCiAKKGRpc3BsYXkgKGZpbHRlciAobGFtYmRhKHgpKD0gKHJlbWFpbmRlciB4IDIpIDApKSAobGlzdCAxIDIgMyA0IDUpKSkKI3wKKGRlZmluZSAoZm9sZGQgYyB6IHhzKQogICAoY29uZCAoKG51bGw/IHhzKSAoeiAnKCkpKQogICAgICAgICAoZWxzZSAoZm9sZGQgYyAoYyAoY2FyIHhzKSB6KSAoY2RyIHhzKSkpKSkKIAooZGVmaW5lIChjb21wIGYgZykgKGxhbWJkYSAoeCkgICAgIDsgKChjb21wIGYgZykgeCkKICAoZiAoZyB4KSkpKQogCihkZWZpbmUgKGNvbnMxIHgpIChsYW1iZGEgKHkpICAgICAgOyAoKGNvbnMxIHgpIHkpCiAgKGNvbnMgeCB5KSkpCiAKKGRlZmluZSAoZmlsdGVyIHAgeHMpCiAgKGZvbGRkIChsYW1iZGEgKHggaykKICAgICAgICAgICAoaWYgKHAgeCkgKGNvbXAgayAoY29uczEgeCkpIGspKQogICAgICAgICAobGFtYmRhICh4KSB4KQogICAgICAgICB4cykpCiAKKGRpc3BsYXkgKGZpbHRlciAobGFtYmRhKHgpKD0gKHJlbWFpbmRlciB4IDIpIDApKSAobGlzdCAxIDIgMyA0IDUpKSkKfCM=