Add "#@" to lambdas/templates and their string/vector fields.

This makes the values immutable, which is now enforced by the interpreter.
This commit is contained in:
Jesse D. McDonald 2010-10-08 20:52:00 -05:00
parent 03c3dec091
commit cc16957256
21 changed files with 317 additions and 317 deletions

View File

@ -1,30 +1,30 @@
#S(#="lambda" #@#S(#="lambda"
#( #@#(
( (
#0=#S(#="structure" #@#0=#S(#="structure"
(#="structure") (#="structure")
5 5
#f #f
) )
#1=#S(#=0 #@#1=#S(#=0
(#="structure") (#="structure")
5 5
#f #f
"annotated-structure" #@"annotated-structure"
#( #@#(
"supers" #@"supers"
"nslots" #@"nslots"
"callable" #@"callable"
"name" #@"name"
"slot-names" #@"slot-names"
) )
) )
#2=#S(#=1 #@#2=#S(#=1
(#="lambda") (#="lambda")
8 8
#f #f
"annotated-lambda" #@"annotated-lambda"
#( #@#(
"global-vars" "global-vars"
"instance-vars" "instance-vars"
"frame-vars" "frame-vars"
@ -36,17 +36,17 @@
) )
) )
) )
#S(#=2 #@#S(#=2
#(("OK") #f) #@#(("OK") #f)
#() #@#()
0 0
"" #@""
"\xff\x01\x00\x00\x02\x02" #@"\xff\x01\x00\x00\x02\x02"
) )
) )
#() #@#()
0 0
"" #@""
"\x02\xfd\xfe\xff" #@"\x02\xfd\xfe\xff"
) )
; vim:set syntax= sw=3 expandtab: ; vim:set syntax= sw=3 expandtab:

View File

@ -3,30 +3,30 @@
; (lambda (number-string) ; (lambda (number-string)
; (fact (string->number number-string))) ; (fact (string->number number-string)))
#S(#="lambda" #@#S(#="lambda"
; (lambda (number-string) ; (lambda (number-string)
; (let/cc k ; (let/cc k
; (call-with-values ; (call-with-values
; (lambda () (string->number number-string)) ; (lambda () (string->number number-string))
; (lambda (n) (k (fact n)))))) ; (lambda (n) (k (fact n))))))
#( #@#(
#="string->number" #="string->number"
#S(#="template" #@#S(#="template"
; (let/cc k ; (let/cc k
; (lambda (n) ; (lambda (n)
; (k (fact n)))) ; (k (fact n))))
#( #@#(
#i"../lib/math/fact.rla" #i"../lib/math/fact.rla"
) )
"\xfe\xff" ; ctx k #@"\xfe\xff" ; ctx k
0 0
"" #@""
"\x01\xfb\x00\x00\x40\x41" #@"\x01\xfb\x00\x00\x40\x41"
) )
) )
#() #@#()
0 0
"" #@""
"\x01\xfb\x00\x00\xfe\x02" #@"\x01\xfb\x00\x00\xfe\x02"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

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

View File

@ -1,13 +1,13 @@
#S(#="lambda" #@#S(#="lambda"
; (define (test-append) ; (define (test-append)
; (append '(1 2 3) (4 5) (6 7 8 9))) ; (append '(1 2 3) (4 5) (6 7 8 9)))
#( #@#(
#i"../lib/primitive/append.rla" #i"../lib/primitive/append.rla"
((1 2 3) (4 5) (6 7 8 9)) ((1 2 3) (4 5) (6 7 8 9))
) )
#() #@#()
0 0
"" #@""
"\x01\x02\x00\x00\xfe\xff" #@"\x01\x02\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -1,29 +1,29 @@
#S(#="lambda" #@#S(#="lambda"
; (define (test-foldl) ; (define (test-foldl)
; (foldl + 0 '(2 3 4 5))) ; (foldl + 0 '(2 3 4 5)))
#( #@#(
#i"../lib/primitive/foldl.rla" #i"../lib/primitive/foldl.rla"
( (
#S(#="lambda" #@#S(#="lambda"
; (define (+ x y) ; (define (+ x y)
; (fix+ x y)) ; (fix+ x y))
#(#f) #@#(#f)
#() #@#()
2 2
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x00\x81\x04\xfb\; (set! f1 (cdr argv)) \x00\x81\x04\xfb\; (set! f1 (cdr argv))
\x00\x81\x03\x81\; (set! f1 (car f1)) \x00\x81\x03\x81\; (set! f1 (car f1))
\x08\x80\x80\x81\; (set! f0 (fix+ f0 f1)) \x08\x80\x80\x81\; (set! f0 (fix+ f0 f1))
\x02\x80\x80\x00"; (set! f0 (cons f0 nil)) \x02\x80\x80\x00"; (set! f0 (cons f0 nil))
"\xff\x80\x00\x00\x01\x01" #@"\xff\x80\x00\x00\x01\x01"
) )
0 0
(2 3 4 5) (2 3 4 5)
) )
) )
#() #@#()
0 0
"" #@""
"\x01\x02\x00\x00\xfe\xff" #@"\x01\x02\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -1,29 +1,29 @@
#S(#="lambda" #@#S(#="lambda"
; (define (test-foldr) ; (define (test-foldr)
; (foldr + 0 '(2 3 4 5))) ; (foldr + 0 '(2 3 4 5)))
#( #@#(
#i"../lib/primitive/foldr.rla" #i"../lib/primitive/foldr.rla"
( (
#S(#="lambda" #@#S(#="lambda"
; (define (+ x y) ; (define (+ x y)
; (fix+ x y)) ; (fix+ x y))
#(#f) #@#(#f)
#() #@#()
2 2
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x00\x81\x04\xfb\; (set! f1 (cdr argv)) \x00\x81\x04\xfb\; (set! f1 (cdr argv))
\x00\x81\x03\x81\; (set! f1 (car f1)) \x00\x81\x03\x81\; (set! f1 (car f1))
\x08\x80\x80\x81\; (set! f0 (fix+ f0 f1)) \x08\x80\x80\x81\; (set! f0 (fix+ f0 f1))
\x02\x80\x80\x00"; (set! f0 (cons f0 nil)) \x02\x80\x80\x00"; (set! f0 (cons f0 nil))
"\xff\x80\x00\x00\x01\x01" #@"\xff\x80\x00\x00\x01\x01"
) )
0 0
(2 3 4 5) (2 3 4 5)
) )
) )
#() #@#()
0 0
"" #@""
"\x01\x02\x00\x00\xfe\xff" #@"\x01\x02\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -1,13 +1,13 @@
#S(#="lambda" #@#S(#="lambda"
; (define (test-list) ; (define (test-list)
; (list 2 3 4 5)) ; (list 2 3 4 5))
#( #@#(
#i"../lib/primitive/list.rla" #i"../lib/primitive/list.rla"
(1 2 3 4 5) (1 2 3 4 5)
) )
#() #@#()
0 0
"" #@""
"\x01\x02\x00\x00\xfe\xff" #@"\x01\x02\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -1,16 +1,16 @@
#S(#="lambda" #@#S(#="lambda"
; (define (test-map) ; (define (test-map)
; (map list '(2 3 4 5))) ; (map list '(2 3 4 5)))
#( #@#(
#i"../lib/primitive/map.rla" #i"../lib/primitive/map.rla"
( (
#i"../lib/primitive/list.rla" #i"../lib/primitive/list.rla"
(2 3 4 5) (2 3 4 5)
) )
) )
#() #@#()
0 0
"" #@""
"\x01\x02\x00\x00\xfe\xff" #@"\x01\x02\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

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

View File

@ -1,13 +1,13 @@
#S(#="lambda" #@#S(#="lambda"
; (define (test-reverse) ; (define (test-reverse)
; (reverse '(2 3 4 5)) ; (reverse '(2 3 4 5))
#( #@#(
#i"../lib/primitive/reverse.rla" #i"../lib/primitive/reverse.rla"
((2 3 4 5)) ((2 3 4 5))
) )
#() #@#()
0 0
"" #@""
"\x01\x02\x00\x00\xfe\xff" #@"\x01\x02\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -4,57 +4,57 @@
; 1 ; 1
; (* n (fact (- n 1))))) ; (* n (fact (- n 1)))))
#0=#S(#="lambda" #@#0=#S(#="lambda"
; (define (fact n) ; (define (fact n)
; ((if (< n 1) ; ((if (< n 1)
; (lambda () 1) ; (lambda () 1)
; (lambda () ... n fact ...)))) ; (lambda () ... n fact ...))))
#( #@#(
1 1
#S(#="lambda" #@#S(#="lambda"
; (lambda _ 1) ; (lambda _ 1)
#((1) #f) #@#((1) #f)
#() #@#()
0 0
"" #@""
"\xff\x01\x00\x00\x02\x02" #@"\xff\x01\x00\x00\x02\x02"
) )
#S(#="template" #@#S(#="template"
; (let [n] ; (let [n]
; (lambda _ ; (lambda _
; (let/cc k ; (let/cc k
; (call-with-values ; (call-with-values
; (lambda () (fact (- n 1))) ; (lambda () (fact (- n 1)))
; (lambda (m) (k (* n m))))))) ; (lambda (m) (k (* n m)))))))
#( #@#(
1 1
#S(#="template" #@#S(#="template"
; (let (n) ; (let (n)
; (let/cc k ; (let/cc k
; (lambda (m) ; (lambda (m)
; (k (* n m))))) ; (k (* n m)))))
#(#f) #@#(#f)
"\x40\xff" ; i0 k #@"\x40\xff" ; i0 k
1 1
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x0a\x80\x40\x80\; (set! f0 (fix* i0 f0)) \x0a\x80\x40\x80\; (set! f0 (fix* i0 f0))
\x02\x80\x80\x00"; (set! f0 (cons f0 nil)) \x02\x80\x80\x00"; (set! f0 (cons f0 nil))
"\x41\x80\x00\x00\x01\x01" #@"\x41\x80\x00\x00\x01\x01"
) )
#=0 ; fact #=0 ; fact
) )
"\x80" #@"\x80"
1 1
"\x09\x80\x40\x01\; (set! f0 (fix- i0 g1)) #@"\x09\x80\x40\x01\; (set! f0 (fix- i0 g1))
\x02\x80\x80\x00"; (set! f0 (cons f0 nil)) \x02\x80\x80\x00"; (set! f0 (cons f0 nil))
"\x03\x80\x00\x00\xfe\x02" #@"\x03\x80\x00\x00\xfe\x02"
) )
) )
#() #@#()
2 2
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x0d\x81\x80\x01\; (set! f1 (fix< f0 g1)) \x0d\x81\x80\x01\; (set! f1 (fix< f0 g1))
\x81\x81\x02\x03"; (set! f1 (if f1 g2 g3)) \x81\x81\x02\x03"; (set! f1 (if f1 g2 g3))
"\x81\x00\x00\x00\xfe\xff" #@"\x81\x00\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -1,17 +1,17 @@
#S(#="lambda" #@#S(#="lambda"
; (define (acons a b lst) ; (define (acons a b lst)
; (cons a (cons b lst))) ; (cons a (cons b lst)))
#(#f) #@#(#f)
#() #@#()
3 3
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x00\x82\x04\xfb\; (set! f2 (cdr argv)) \x00\x82\x04\xfb\; (set! f2 (cdr argv))
\x00\x81\x03\x82\; (set! f1 (car f2)) \x00\x81\x03\x82\; (set! f1 (car f2))
\x00\x82\x04\x82\; (set! f2 (cdr f2)) \x00\x82\x04\x82\; (set! f2 (cdr f2))
\x00\x82\x03\x82\; (set! f2 (car f2)) \x00\x82\x03\x82\; (set! f2 (car f2))
\x02\x81\x81\x82\; (set! f1 (cons f1 f2)) \x02\x81\x81\x82\; (set! f1 (cons f1 f2))
\x02\x80\x80\x81\; (set! f0 (cons f0 f1)) \x02\x80\x80\x81\; (set! f0 (cons f0 f1))
\x02\x80\x80\x00"; (set! f0 (cons f0 nil)) \x02\x80\x80\x00"; (set! f0 (cons f0 nil))
"\xff\x80\x00\x00\x01\x01" #@"\xff\x80\x00\x00\x01\x01"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -11,40 +11,40 @@
; #t ; #t
; fns)) ; fns))
#S(#="lambda" #@#S(#="lambda"
#( #@#(
#i"foldl.rla" #i"foldl.rla"
#S(#="template" #@#S(#="template"
; (lambda (fn _) ; (lambda (fn _)
; (let/cc k2 ; (let/cc k2
; ((lambda (x) ; ((lambda (x)
; ((if x k2 k) x)) ; ((if x k2 k) x))
; (fn)))) ; (fn))))
#( #@#(
#S(#="template" #@#S(#="template"
; (lambda (x) ; (lambda (x)
; ((if x k2 k) x)) ; ((if x k2 k) x))
#(#f) #@#(#f)
"\x40\xff" ; i0 k #@"\x40\xff" ; i0 k
1 1
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x80\x80\x41\x40"; (set! f0 (if f0 i1 i0)) \x80\x80\x41\x40"; (set! f0 (if f0 i1 i0))
"\x80\xfb\x00\x00\x01\x01" #@"\x80\xfb\x00\x00\x01\x01"
) )
) )
"\xff" ; k #@"\xff" ; k
1 1
"\x00\x80\x03\xfb"; (set! f0 (car argv)) #@"\x00\x80\x03\xfb"; (set! f0 (car argv))
"\x80\x00\x00\x00\xfe\x01" #@"\x80\x00\x00\x00\xfe\x01"
) )
#t #t
) )
#() #@#()
2 2
"\x02\x80\xfb\x00\; (set! f0 (cons argv nil)) #@"\x02\x80\xfb\x00\; (set! f0 (cons argv nil))
\x02\x80\x03\x80\; (set! f0 (cons g3 f0)) \x02\x80\x03\x80\; (set! f0 (cons g3 f0))
\x00\x81\x1b\x02\; (set! f1 (lambda g2)) \x00\x81\x1b\x02\; (set! f1 (lambda g2))
\x02\x80\x81\x80"; (set! f0 (cons f1 f0)) \x02\x80\x81\x80"; (set! f0 (cons f1 f0))
"\x01\x80\x00\x00\xfe\xff" #@"\x01\x80\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -6,30 +6,30 @@
; nil ; nil
; lsts)) ; lsts))
#S(#="lambda" #@#S(#="lambda"
#( #@#(
#i"foldr.rla" #i"foldr.rla"
#S(#="lambda" #@#S(#="lambda"
#( #@#(
#i"foldr.rla" #i"foldr.rla"
#i"cons.rla" #i"cons.rla"
) )
#() #@#()
2 2
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x02\x81\x80\x00\; (set! f1 (cons f0 nil)) \x02\x81\x80\x00\; (set! f1 (cons f0 nil))
\x00\x80\x04\xfb\; (set! f0 (cdr argv)) \x00\x80\x04\xfb\; (set! f0 (cdr argv))
\x00\x80\x03\x80\; (set! f0 (car f0)) \x00\x80\x03\x80\; (set! f0 (car f0))
\x02\x81\x80\x81\; (set! f1 (cons f0 f1)) \x02\x81\x80\x81\; (set! f1 (cons f0 f1))
\x02\x81\x02\x81"; (set! f1 (cons g2 f1)) \x02\x81\x02\x81"; (set! f1 (cons g2 f1))
"\x01\x81\x00\x00\xfe\xff" #@"\x01\x81\x00\x00\xfe\xff"
) )
) )
#() #@#()
1 1
"\x02\x80\xfb\x00\; (set! f0 (cons argv nil)) #@"\x02\x80\xfb\x00\; (set! f0 (cons argv nil))
\x02\x80\x00\x80\; (set! f0 (cons nil f0)) \x02\x80\x00\x80\; (set! f0 (cons nil f0))
\x02\x80\x02\x80"; (set! f0 (cons g2 f0)) \x02\x80\x02\x80"; (set! f0 (cons g2 f0))
"\x01\x80\x00\x00\xfe\xff" #@"\x01\x80\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -1,14 +1,14 @@
#S(#="lambda" #@#S(#="lambda"
; (define (cons x y) ; (define (cons x y)
; (builtin-cons x y)) ; (builtin-cons x y))
#(#f) #@#(#f)
#() #@#()
2 2
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x00\x81\x04\xfb\; (set! f1 (cdr argv)) \x00\x81\x04\xfb\; (set! f1 (cdr argv))
\x00\x81\x03\x81\; (set! f1 (car f1)) \x00\x81\x03\x81\; (set! f1 (car f1))
\x02\x80\x80\x81\; (set! f0 (cons f0 f1)) \x02\x80\x80\x81\; (set! f0 (cons f0 f1))
\x02\x80\x80\x00"; (set! f0 (cons f0 nil)) \x02\x80\x80\x00"; (set! f0 (cons f0 nil))
"\xff\x80\x00\x00\x01\x01" #@"\xff\x80\x00\x00\x01\x01"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -7,63 +7,63 @@
; (foldl fn (fn (car lst) init) (cdr lst)) ; (foldl fn (fn (car lst) init) (cdr lst))
; init)) ; init))
#0=#S(#="lambda" #@#0=#S(#="lambda"
; (define (foldl fn init lst) ; (define (foldl fn init lst)
; ((if (pair? lst) ; ((if (pair? lst)
; (lambda () (foldl fn (fn (car lst) init) (cdr lst)) ; (lambda () (foldl fn (fn (car lst) init) (cdr lst))
; (lambda () init)))) ; (lambda () init))))
#( #@#(
#S(#="template" #@#S(#="template"
; (lambda () ; (lambda ()
; (let/cc k ; (let/cc k
; (call-with-multiple-values ; (call-with-multiple-values
; (lambda (new-init) ; (lambda (new-init)
; (k (foldl fn new-init (cdr lst)))) ; (k (foldl fn new-init (cdr lst))))
; (lambda () (fn (car lst) init))))) ; (lambda () (fn (car lst) init)))))
#( #@#(
#S(#="template" #@#S(#="template"
; (lambda (new-init) ; (lambda (new-init)
; (k (foldl fn new-init (cdr lst)))) ; (k (foldl fn new-init (cdr lst))))
#(#=0) #@#(#=0)
"\x40\x41\x42\xfe\xff" ; i0 i1 i2 ctx k #@"\x40\x41\x42\xfe\xff" ; i0 i1 i2 ctx k
2 2
"\x00\x80\x04\x42\; (set! f0 (cdr i2)) #@"\x00\x80\x04\x42\; (set! f0 (cdr i2))
\x02\x80\x80\x00\; (set! f0 (cons f0 nil)) \x02\x80\x80\x00\; (set! f0 (cons f0 nil))
\x00\x81\x03\xfb\; (set! f1 (car argv)) \x00\x81\x03\xfb\; (set! f1 (car argv))
\x02\x80\x81\x80\; (set! f0 (cons f1 f0)) \x02\x80\x81\x80\; (set! f0 (cons f1 f0))
\x02\x80\x40\x80"; (set! f0 (cons i0 f0)) \x02\x80\x40\x80"; (set! f0 (cons i0 f0))
"\x01\x80\x00\x00\x43\x44" #@"\x01\x80\x00\x00\x43\x44"
) )
) )
"\x80\x81\x82" ; f0=fn f1=init f2=lst #@"\x80\x81\x82" ; f0=fn f1=init f2=lst
2 2
"\x02\x80\x41\x00\; (set! f0 (cons i1 nil)) #@"\x02\x80\x41\x00\; (set! f0 (cons i1 nil))
\x00\x81\x03\x42\; (set! f1 (car i2)) \x00\x81\x03\x42\; (set! f1 (car i2))
\x02\x80\x81\x80"; (set! f0 (cons f1 f0)) \x02\x80\x81\x80"; (set! f0 (cons f1 f0))
"\x40\x80\x00\x00\xfe\x01" #@"\x40\x80\x00\x00\xfe\x01"
) )
#S(#="template" #@#S(#="template"
; (lambda () init) ; (lambda () init)
#(#f) #@#(#f)
"\x81" ; f1 #@"\x81" ; f1
1 1
"\x02\x80\x40\x00"; (set! f0 (cons i0 nil)) #@"\x02\x80\x40\x00"; (set! f0 (cons i0 nil))
"\xff\x80\x00\x00\x01\x01" #@"\xff\x80\x00\x00\x01\x01"
) )
) )
#() #@#()
6 6
"\x00\x80\x03\xfb\; (set! f0 (car argv)) ; f0=fn #@"\x00\x80\x03\xfb\; (set! f0 (car argv)) ; f0=fn
\x00\x82\x04\xfb\; (set! f2 (cdr argv)) \x00\x82\x04\xfb\; (set! f2 (cdr argv))
\x00\x81\x03\x82\; (set! f1 (car f2)) ; f1=init \x00\x81\x03\x82\; (set! f1 (car f2)) ; f1=init
\x00\x82\x04\x82\; (set! f2 (cdr f2)) \x00\x82\x04\x82\; (set! f2 (cdr f2))
\x00\x82\x03\x82\; (set! f2 (car f2)) ; f2=lst \x00\x82\x03\x82\; (set! f2 (car f2)) ; f2=lst
\x00\x84\x01\x01\; (set! f4 g1) \x00\x84\x01\x01\; (set! f4 g1)
\x00\x85\x01\x00\; (set! f5 nil) \x00\x85\x01\x00\; (set! f5 nil)
\x00\x83\x0b\x82\; (set! f3 (pair? f2)) \x00\x83\x0b\x82\; (set! f3 (pair? f2))
\x40\x83\x00\x00\; (goto-end-if f3) \x40\x83\x00\x00\; (goto-end-if f3)
\x00\x84\x01\xff\; (set! f4 k) \x00\x84\x01\xff\; (set! f4 k)
\x02\x85\x81\x00"; (set! f5 (cons f1 nil)) \x02\x85\x81\x00"; (set! f5 (cons f1 nil))
"\x84\x85\x00\x00\xfe\xff" #@"\x84\x85\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -8,56 +8,56 @@
; (foldr fn init (cdr lst))) ; (foldr fn init (cdr lst)))
; init)) ; init))
#0=#S(#="lambda" #@#0=#S(#="lambda"
; (define (foldr fn init lst) ; (define (foldr fn init lst)
; ((if (pair? lst) ; ((if (pair? lst)
; (lambda () (fn (car lst) ; (lambda () (fn (car lst)
; (foldr fn init (cdr lst)))) ; (foldr fn init (cdr lst))))
; (lambda () init)))) ; (lambda () init))))
#( #@#(
#S(#="template" #@#S(#="template"
; (lambda () ; (lambda ()
; (let/cc k ; (let/cc k
; (let ([lstcar (car lst)]) ; (let ([lstcar (car lst)])
; (call-with-multiple-values ; (call-with-multiple-values
; (lambda (v) (k (fn lstcar v))) ; (lambda (v) (k (fn lstcar v)))
; (lambda () (foldr fn init (cdr lst))))))) ; (lambda () (foldr fn init (cdr lst)))))))
#( #@#(
#S(#="template" #@#S(#="template"
; (lambda (v) (k (fn lstcar v))) ; (lambda (v) (k (fn lstcar v)))
#() #@#()
"\x40\x81\xfe\xff" ; i0 f1 ctx k #@"\x40\x81\xfe\xff" ; i0 f1 ctx k
1 1
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x02\x80\x80\x00\; (set! f0 (cons f0 nil)) \x02\x80\x80\x00\; (set! f0 (cons f0 nil))
\x02\x80\x41\x80"; (set! f0 (cons i1 f0)) \x02\x80\x41\x80"; (set! f0 (cons i1 f0))
"\x40\x80\x00\x00\x42\x43" #@"\x40\x80\x00\x00\x42\x43"
) )
#=0 ; foldr #=0 ; foldr
) )
"\x80\x81\x82" ; f0=fn f1=init f2=lst #@"\x80\x81\x82" ; f0=fn f1=init f2=lst
3 3
"\x00\x80\x04\x42\; (set! f0 (cdr i2)) #@"\x00\x80\x04\x42\; (set! f0 (cdr i2))
\x00\x81\x03\x42\; (set! f1 (car i2)) \x00\x81\x03\x42\; (set! f1 (car i2))
\x02\x82\x80\x00\; (set! f2 (cons f0 nil)) \x02\x82\x80\x00\; (set! f2 (cons f0 nil))
\x02\x82\x41\x82\; (set! f2 (cons i1 f2)) \x02\x82\x41\x82\; (set! f2 (cons i1 f2))
\x02\x82\x40\x82"; (set! f2 (cons i0 f2)) \x02\x82\x40\x82"; (set! f2 (cons i0 f2))
"\x02\x82\x00\x00\xfe\x01" #@"\x02\x82\x00\x00\xfe\x01"
) )
) )
#() #@#()
6 6
"\x00\x80\x03\xfb\; (set! f0 (car argv)) ; f0=fn #@"\x00\x80\x03\xfb\; (set! f0 (car argv)) ; f0=fn
\x00\x82\x04\xfb\; (set! f2 (cdr argv)) \x00\x82\x04\xfb\; (set! f2 (cdr argv))
\x00\x81\x03\x82\; (set! f1 (car f2)) ; f1=init \x00\x81\x03\x82\; (set! f1 (car f2)) ; f1=init
\x00\x82\x04\x82\; (set! f2 (cdr f2)) \x00\x82\x04\x82\; (set! f2 (cdr f2))
\x00\x82\x03\x82\; (set! f2 (car f2)) ; f2=lst \x00\x82\x03\x82\; (set! f2 (car f2)) ; f2=lst
\x00\x84\x01\x01\; (set! f4 g1) \x00\x84\x01\x01\; (set! f4 g1)
\x00\x85\x01\x00\; (set! f5 nil) \x00\x85\x01\x00\; (set! f5 nil)
\x00\x83\x0b\x82\; (set! f3 (pair? f2)) \x00\x83\x0b\x82\; (set! f3 (pair? f2))
\x40\x83\x00\x00\; (goto-end-if f3) \x40\x83\x00\x00\; (goto-end-if f3)
\x00\x84\x01\xff\; (set! f4 k) \x00\x84\x01\xff\; (set! f4 k)
\x02\x85\x81\x00"; (set! f5 (cons f1 nil)) \x02\x85\x81\x00"; (set! f5 (cons f1 nil))
"\x84\x85\x00\x00\xfe\xff" #@"\x84\x85\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -1,16 +1,16 @@
;; Returns a copy of the argument list ;; Returns a copy of the argument list
; (define (list . lst) ; (define (list . lst)
; (foldr cons nil lst)) ; (foldr cons nil lst))
#S(#="lambda" #@#S(#="lambda"
#( #@#(
#i"foldr.rla" #i"foldr.rla"
#i"cons.rla" #i"cons.rla"
) )
#() #@#()
1 1
"\x02\x80\xfb\x00\; (set! f0 (cons argv nil)) #@"\x02\x80\xfb\x00\; (set! f0 (cons argv nil))
\x02\x80\x00\x80\; (set! f0 (cons nil f0)) \x02\x80\x00\x80\; (set! f0 (cons nil f0))
\x02\x80\x02\x80"; (set! f0 (cons g2 f0)) \x02\x80\x02\x80"; (set! f0 (cons g2 f0))
"\x01\x80\x00\x00\xfe\xff" #@"\x01\x80\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -1,59 +1,59 @@
#S(#="lambda" #@#S(#="lambda"
; (define (map fn lst) ; (define (map fn lst)
; (reverse (foldl (lambda (x lst) ; (reverse (foldl (lambda (x lst)
; (cons (fn x) lst)) ; (cons (fn x) lst))
; () ; ()
; lst))) ; lst)))
#( #@#(
#i"foldl.rla" #i"foldl.rla"
#S(#="template" #@#S(#="template"
; (lambda (x rlst) ; (lambda (x rlst)
; (let/cc k ; (let/cc k
; (call-with-multiple-values ; (call-with-multiple-values
; (lambda (y) (k (cons y rlst))) ; (lambda (y) (k (cons y rlst)))
; (lambda () (fn x))))) ; (lambda () (fn x)))))
#( #@#(
#S(#="template" #@#S(#="template"
; (lambda (y) ; (lambda (y)
; (k (cons y rlst))) ; (k (cons y rlst)))
#(#f) #@#(#f)
"\x81\xff" ; f1 k #@"\x81\xff" ; f1 k
1 1
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x02\x80\x80\x40\; (set! f0 (cons f0 i0)) \x02\x80\x80\x40\; (set! f0 (cons f0 i0))
\x02\x80\x80\x00"; (set! f0 (cons f0 nil)) \x02\x80\x80\x00"; (set! f0 (cons f0 nil))
"\x41\x80\x00\x00\x01\x01" #@"\x41\x80\x00\x00\x01\x01"
) )
) )
"\x80" #@"\x80"
2 2
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x00\x81\x04\xfb\; (set! f1 (cdr argv)) \x00\x81\x04\xfb\; (set! f1 (cdr argv))
\x00\x81\x03\x81\; (set! f1 (car f1)) \x00\x81\x03\x81\; (set! f1 (car f1))
\x00\x81\x1b\x01\; (set! f1 (lambda g1)) \x00\x81\x1b\x01\; (set! f1 (lambda g1))
\x02\x80\x80\x00"; (set! f0 (cons f0 nil)) \x02\x80\x80\x00"; (set! f0 (cons f0 nil))
"\x40\x80\x00\x00\xfe\x81" #@"\x40\x80\x00\x00\xfe\x81"
) )
#S(#="template" #@#S(#="template"
; (lambda (rlst) ; (lambda (rlst)
; (k (reverse rlst))) ; (k (reverse rlst)))
#(#i"reverse.rla") #@#(#i"reverse.rla")
"\xfe\xff" ; ctx k #@"\xfe\xff" ; ctx k
0 0
"" #@""
"\x01\xfb\x00\x00\x40\x41" #@"\x01\xfb\x00\x00\x40\x41"
) )
) )
#() #@#()
4 4
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x00\x81\x04\xfb\; (set! f1 (cdr argv)) \x00\x81\x04\xfb\; (set! f1 (cdr argv))
\x00\x81\x03\x81\; (set! f1 (car f1)) \x00\x81\x03\x81\; (set! f1 (car f1))
\x02\x82\x81\x00\; (set! f2 (cons f1 nil)) \x02\x82\x81\x00\; (set! f2 (cons f1 nil))
\x02\x82\x00\x82\; (set! f2 (cons nil f2)) \x02\x82\x00\x82\; (set! f2 (cons nil f2))
\x00\x83\x1b\x02\; (set! f3 (lambda g2)) \x00\x83\x1b\x02\; (set! f3 (lambda g2))
\x02\x82\x83\x82\; (set! f2 (cons f3 f2)) \x02\x82\x83\x82\; (set! f2 (cons f3 f2))
\x00\x83\x1b\x03"; (set! f3 (lambda g3)) \x00\x83\x1b\x03"; (set! f3 (lambda g3))
"\x01\x82\x00\x00\xfe\x83" #@"\x01\x82\x00\x00\xfe\x83"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -11,41 +11,41 @@
; #f ; #f
; fns)) ; fns))
#S(#="lambda" #@#S(#="lambda"
#( #@#(
#i"foldl.rla" #i"foldl.rla"
#S(#="template" #@#S(#="template"
; (lambda (fn _) ; (lambda (fn _)
; (let/cc k2 ; (let/cc k2
; ((lambda (x) ; ((lambda (x)
; ((if x k2 k) x)) ; ((if x k2 k) x))
; (fn)))) ; (fn))))
#( #@#(
#S(#="template" #@#S(#="template"
; (lambda (x) ; (lambda (x)
; ((if x k2 k) x)) ; ((if x k2 k) x))
#(#f) #@#(#f)
"\x40\xff" ; i0 k #@"\x40\xff" ; i0 k
1 1
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x80\x80\x40\x41"; (set! f0 (if f0 i0 i1)) \x80\x80\x40\x41"; (set! f0 (if f0 i0 i1))
"\x80\xfb\x00\x00\x01\x01" #@"\x80\xfb\x00\x00\x01\x01"
) )
) )
"\xff" ; k #@"\xff" ; k
2 2
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x00\x81\x1b\x01"; (set! f1 (lambda g1)) \x00\x81\x1b\x01"; (set! f1 (lambda g1))
"\x80\x00\x00\x00\xfe\x81" #@"\x80\x00\x00\x00\xfe\x81"
) )
#f #f
) )
#() #@#()
2 2
"\x02\x80\xfb\x00\; (set! f0 (cons argv nil)) #@"\x02\x80\xfb\x00\; (set! f0 (cons argv nil))
\x02\x80\x03\x80\; (set! f0 (cons g3 f0)) \x02\x80\x03\x80\; (set! f0 (cons g3 f0))
\x00\x81\x1b\x02\; (set! f1 (lambda g2)) \x00\x81\x1b\x02\; (set! f1 (lambda g2))
\x02\x80\x81\x80"; (set! f0 (cons f1 f0)) \x02\x80\x81\x80"; (set! f0 (cons f1 f0))
"\x01\x80\x00\x00\xfe\xff" #@"\x01\x80\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab:

View File

@ -1,17 +1,17 @@
;; Returns a reversed copy of the given list ;; Returns a reversed copy of the given list
; (define (reverse lst) ; (define (reverse lst)
; (foldl cons nil lst)) ; (foldl cons nil lst))
#S(#="lambda" #@#S(#="lambda"
#( #@#(
#i"foldl.rla" #i"foldl.rla"
#i"cons.rla" #i"cons.rla"
) )
#() #@#()
1 1
"\x00\x80\x03\xfb\; (set! f0 (car argv)) #@"\x00\x80\x03\xfb\; (set! f0 (car argv))
\x02\x80\x80\x00\; (set! f0 (cons f0 nil)) \x02\x80\x80\x00\; (set! f0 (cons f0 nil))
\x02\x80\x00\x80\; (set! f0 (cons nil f0)) \x02\x80\x00\x80\; (set! f0 (cons nil f0))
\x02\x80\x02\x80"; (set! f0 (cons g2 f0)) \x02\x80\x02\x80"; (set! f0 (cons g2 f0))
"\x01\x80\x00\x00\xfe\xff" #@"\x01\x80\x00\x00\xfe\xff"
) )
; vim:set syntax= sw=2 expandtab: ; vim:set syntax= sw=2 expandtab: