More primitive functions: map, reverse, acons.
This commit is contained in:
parent
2d7b079dd8
commit
a6715b0922
|
|
@ -0,0 +1,19 @@
|
||||||
|
#S(#="lambda"
|
||||||
|
; (define (test-map)
|
||||||
|
; (map list '(2 3 4 5)))
|
||||||
|
#(
|
||||||
|
#i"../lib/primitive/map.rla"
|
||||||
|
(
|
||||||
|
#i"../lib/primitive/list.rla"
|
||||||
|
(2 3 4 5)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
#()
|
||||||
|
0
|
||||||
|
""
|
||||||
|
0x01 ; g1
|
||||||
|
0x02 ; g2
|
||||||
|
0xfe ; k
|
||||||
|
0xff ; ctx
|
||||||
|
)
|
||||||
|
; vim:set syntax= sw=2 expandtab:
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
#S(#="lambda"
|
||||||
|
; (define (test-reverse)
|
||||||
|
; (reverse '(2 3 4 5))
|
||||||
|
#(
|
||||||
|
#i"../lib/primitive/reverse.rla"
|
||||||
|
((2 3 4 5))
|
||||||
|
)
|
||||||
|
#()
|
||||||
|
0
|
||||||
|
""
|
||||||
|
0x01 ; g1
|
||||||
|
0x02 ; g2
|
||||||
|
0xfe ; k
|
||||||
|
0xff ; ctx
|
||||||
|
)
|
||||||
|
; vim:set syntax= sw=2 expandtab:
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
#S(#="lambda"
|
||||||
|
; (define (acons a b lst)
|
||||||
|
; (cons a (cons b lst)))
|
||||||
|
#(#f)
|
||||||
|
#()
|
||||||
|
3
|
||||||
|
"\x00\x80\x03\xfd\; (set! f0 (car argv))
|
||||||
|
\x00\x82\x04\xfd\; (set! f2 (cdr argv))
|
||||||
|
\x00\x81\x03\x82\; (set! f1 (car f2))
|
||||||
|
\x00\x82\x04\x82\; (set! f2 (cdr f2))
|
||||||
|
\x00\x82\x03\x82\; (set! f2 (car f2))
|
||||||
|
\x02\x81\x81\x82\; (set! f1 (cons f1 f2))
|
||||||
|
\x02\x80\x80\x81\; (set! f0 (cons f0 f1))
|
||||||
|
\x02\x80\x80\x00"; (set! f0 (cons f0 nil))
|
||||||
|
0xfe ; k
|
||||||
|
0x80 ; f0
|
||||||
|
0x01 ; g1
|
||||||
|
0x01 ; g1
|
||||||
|
)
|
||||||
|
; vim:set syntax= sw=2 expandtab:
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
#S(#="lambda"
|
||||||
|
; (define (map fn lst)
|
||||||
|
; (reverse (foldl (lambda (x lst)
|
||||||
|
; (cons (fn x) lst))
|
||||||
|
; ()
|
||||||
|
; lst)))
|
||||||
|
#(
|
||||||
|
#i"foldl.rla"
|
||||||
|
#S(#="template"
|
||||||
|
; (lambda (x rlst)
|
||||||
|
; (let/cc k
|
||||||
|
; (call-with-multiple-values
|
||||||
|
; (lambda (y) (k (cons y rlst)))
|
||||||
|
; (lambda () (fn x)))))
|
||||||
|
#(
|
||||||
|
#S(#="template"
|
||||||
|
; (lambda (y)
|
||||||
|
; (k (cons y rlst)))
|
||||||
|
#(#f)
|
||||||
|
"\x81\xfe\xff" ; f1 k ctx
|
||||||
|
1
|
||||||
|
"\x00\x80\x03\xfd\; (set! f0 (car argv))
|
||||||
|
\x02\x80\x80\x40\; (set! f0 (cons f0 i0))
|
||||||
|
\x02\x80\x80\x00"; (set! f0 (cons f0 nil))
|
||||||
|
0x41 ; i1
|
||||||
|
0x80 ; f0
|
||||||
|
0x01 ; g1
|
||||||
|
0x01 ; g1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
"\x80"
|
||||||
|
2
|
||||||
|
"\x00\x80\x03\xfd\; (set! f0 (car argv))
|
||||||
|
\x00\x81\x04\xfd\; (set! f1 (cdr argv))
|
||||||
|
\x00\x81\x03\x81\; (set! f1 (car f1))
|
||||||
|
\x00\x81\x1b\x01\; (set! f1 (lambda g1))
|
||||||
|
\x02\x80\x80\x00"; (set! f0 (cons f0 nil))
|
||||||
|
0x40 ; i0
|
||||||
|
0x80 ; f0
|
||||||
|
0x81 ; f1
|
||||||
|
0xff ; ctx
|
||||||
|
)
|
||||||
|
#S(#="template"
|
||||||
|
; (lambda (rlst)
|
||||||
|
; (k (reverse rlst)))
|
||||||
|
#(#f #i"reverse.rla")
|
||||||
|
"\xfe"
|
||||||
|
0
|
||||||
|
""
|
||||||
|
0x02 ; g2
|
||||||
|
0xfd ; argv
|
||||||
|
0x40 ; i0
|
||||||
|
0x01 ; g1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
#()
|
||||||
|
4
|
||||||
|
"\x00\x80\x03\xfd\; (set! f0 (car argv))
|
||||||
|
\x00\x81\x04\xfd\; (set! f1 (cdr argv))
|
||||||
|
\x00\x81\x03\x81\; (set! f1 (car f1))
|
||||||
|
\x02\x82\x81\x00\; (set! f2 (cons f1 nil))
|
||||||
|
\x02\x82\x00\x82\; (set! f2 (cons nil f2))
|
||||||
|
\x00\x83\x1b\x02\; (set! f3 (lambda g2))
|
||||||
|
\x02\x82\x83\x82\; (set! f2 (cons f3 f2))
|
||||||
|
\x00\x83\x1b\x03"; (set! f3 (lambda g3))
|
||||||
|
0x01 ; g1
|
||||||
|
0x82 ; f2
|
||||||
|
0x83 ; f3
|
||||||
|
0xff ; ctx
|
||||||
|
)
|
||||||
|
; vim:set syntax= sw=2 expandtab:
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
;; Returns a reversed copy of the given list
|
||||||
|
; (define (reverse lst)
|
||||||
|
; (foldl cons nil lst))
|
||||||
|
#S(#="lambda"
|
||||||
|
#(
|
||||||
|
#i"foldl.rla"
|
||||||
|
#i"cons.rla"
|
||||||
|
)
|
||||||
|
#()
|
||||||
|
1
|
||||||
|
"\x00\x80\x03\xfd\; (set! f0 (car argv))
|
||||||
|
\x02\x80\x80\x00\; (set! f0 (cons f0 nil))
|
||||||
|
\x02\x80\x00\x80\; (set! f0 (cons nil f0))
|
||||||
|
\x02\x80\x02\x80"; (set! f0 (cons g2 f0))
|
||||||
|
0x01 ; g1
|
||||||
|
0x80 ; f0
|
||||||
|
0xfe ; k
|
||||||
|
0xff ; ctx
|
||||||
|
)
|
||||||
|
; vim:set syntax= sw=2 expandtab:
|
||||||
Loading…
Reference in New Issue