Commit basic (and ...) & (or ...) *functions*, with lambda args.

This commit is contained in:
Jesse D. McDonald 2010-04-11 17:38:21 -05:00
parent 893b7e122e
commit 9af29f28da
4 changed files with 172 additions and 0 deletions

26
src/examples/test-and.rla Normal file
View File

@ -0,0 +1,26 @@
#S(#="lambda"
; (define (test-and)
; (and (lambda () 3)
; (lambda () #t)
; (lambda () 4)
; (lambda () #f)
; (lambda () 5)))
#(
#i"../lib/primitive/and.rla"
(
#S(#="lambda" #(( 3) #f) #() 0 "" 0xfe 0x01 0x02 0x02)
#S(#="lambda" #((#t) #f) #() 0 "" 0xfe 0x01 0x02 0x02)
#S(#="lambda" #(( 4) #f) #() 0 "" 0xfe 0x01 0x02 0x02)
#S(#="lambda" #((#f) #f) #() 0 "" 0xfe 0x01 0x02 0x02)
#S(#="lambda" #(( 5) #f) #() 0 "" 0xfe 0x01 0x02 0x02)
)
)
#()
0
""
0x01 ; g1
0x02 ; g2
0xfe ; k
0xff ; ctx
)
; vim:set syntax= sw=2 expandtab:

26
src/examples/test-or.rla Normal file
View File

@ -0,0 +1,26 @@
#S(#="lambda"
; (define (test-or)
; (and (lambda () #f)
; (lambda () 3)
; (lambda () #f)
; (lambda () #t)
; (lambda () #f)))
#(
#i"../lib/primitive/or.rla"
(
#S(#="lambda" #((#f) #f) #() 0 "" 0xfe 0x01 0x02 0x02)
#S(#="lambda" #(( 3) #f) #() 0 "" 0xfe 0x01 0x02 0x02)
#S(#="lambda" #((#f) #f) #() 0 "" 0xfe 0x01 0x02 0x02)
#S(#="lambda" #((#t) #f) #() 0 "" 0xfe 0x01 0x02 0x02)
#S(#="lambda" #((#f) #f) #() 0 "" 0xfe 0x01 0x02 0x02)
)
)
#()
0
""
0x01 ; g1
0x02 ; g2
0xfe ; k
0xff ; ctx
)
; vim:set syntax= sw=2 expandtab:

60
src/lib/primitive/and.rla Normal file
View File

@ -0,0 +1,60 @@
;; Evaluates each function in turn, returning #f immediately if any
;; function returns #f, or else the first result of the last function.
; (define (and . fns)
; (let/cc k
; (foldl (lambda (fn _)
; (let/cc k2
; ((lambda (x)
; ((if x k2 k) x))
; (fn))))
; #t
; 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\xfe" ; i0 k
1
"\x00\x80\x03\xfd\; (set! f0 (car argv))
\x80\x80\x41\x40"; (set! f0 (if f0 i1 i0))
0x80 ; f0
0xfd ; argv
0x01 ; g1
0x01 ; g1
)
)
"\xfe" ; k
2
"\x00\x80\x03\xfd\; (set! f0 (car argv))
\x00\x81\x1b\x01"; (set! f1 (lambda g1))
0x80 ; f0
0x00 ; nil
0x81 ; f1
0xff ; ctx
)
#t
)
#()
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 ; k
0xff ; ctx
)
; vim:set syntax= sw=2 expandtab:

60
src/lib/primitive/or.rla Normal file
View File

@ -0,0 +1,60 @@
;; 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\xfe" ; 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
)
)
"\xfe" ; k
2
"\x00\x80\x03\xfd\; (set! f0 (car argv))
\x00\x81\x1b\x01"; (set! f1 (lambda g1))
0x80 ; f0
0x00 ; nil
0x81 ; f1
0xff ; ctx
)
#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 ; k
0xff ; ctx
)
; vim:set syntax= sw=2 expandtab: