61 lines
1.3 KiB
Plaintext
61 lines
1.3 KiB
Plaintext
;; Evaluates each function in turn, immediately returning the first
|
|
;; non-#f result, or #f if no function returns a non-#f result.
|
|
|
|
; (define (or . fns)
|
|
; (let/cc k
|
|
; (foldl (lambda (fn _)
|
|
; (let/cc k2
|
|
; ((lambda (x)
|
|
; ((if x k k2) x))
|
|
; (fn))))
|
|
; #f
|
|
; fns))
|
|
|
|
#S(#="lambda"
|
|
#(
|
|
#i"foldl.rla"
|
|
#S(#="template"
|
|
; (lambda (fn _)
|
|
; (let/cc k2
|
|
; ((lambda (x)
|
|
; ((if x k2 k) x))
|
|
; (fn))))
|
|
#(
|
|
#S(#="template"
|
|
; (lambda (x)
|
|
; ((if x k2 k) x))
|
|
#(#f)
|
|
"\x40\xff" ; i0 k
|
|
1
|
|
"\x00\x80\x03\xfd\; (set! f0 (car argv))
|
|
\x80\x80\x40\x41"; (set! f0 (if f0 i0 i1))
|
|
0x80 ; f0
|
|
0xfd ; argv
|
|
0x01 ; g1
|
|
0x01 ; g1
|
|
)
|
|
)
|
|
"\xff" ; k
|
|
2
|
|
"\x00\x80\x03\xfd\; (set! f0 (car argv))
|
|
\x00\x81\x1b\x01"; (set! f1 (lambda g1))
|
|
0x80 ; f0
|
|
0x00 ; nil
|
|
0xfe ; ctx
|
|
0x81 ; f1
|
|
)
|
|
#f
|
|
)
|
|
#()
|
|
2
|
|
"\x02\x80\xfd\x00\; (set! f0 (cons argv nil))
|
|
\x02\x80\x03\x80\; (set! f0 (cons g3 f0))
|
|
\x00\x81\x1b\x02\; (set! f1 (lambda g2))
|
|
\x02\x80\x81\x80"; (set! f0 (cons f1 f0))
|
|
0x01 ; g1
|
|
0x80 ; f0
|
|
0xfe ; ctx
|
|
0xff ; k
|
|
)
|
|
; vim:set syntax= sw=2 expandtab:
|