From a1db12d1e2f3eadb38683e68ce09f8d1e7a9762c Mon Sep 17 00:00:00 2001 From: Jesse McDonald Date: Sat, 10 Apr 2010 22:50:09 -0500 Subject: [PATCH] Commit implementation of (list ...) primitive function. --- src/examples/test-list.rla | 16 +++++++++ src/lib/primitive/list.rla | 70 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 src/examples/test-list.rla create mode 100644 src/lib/primitive/list.rla diff --git a/src/examples/test-list.rla b/src/examples/test-list.rla new file mode 100644 index 0000000..7246375 --- /dev/null +++ b/src/examples/test-list.rla @@ -0,0 +1,16 @@ +#S(#="lambda" + ; (define (test-list) + ; (list 2 3 4 5)) + #( + #i"../lib/primitive/list.rla" + (1 2 3 4 5) + ) + #() + 0 + "" + 0x01 ; g0 + 0x02 ; g2 + 0xfe ; k + 0xff ; ctx +) +; vim:set syntax= sw=2 expandtab: diff --git a/src/lib/primitive/list.rla b/src/lib/primitive/list.rla new file mode 100644 index 0000000..8465165 --- /dev/null +++ b/src/lib/primitive/list.rla @@ -0,0 +1,70 @@ +;; Returns a copy of the argument list +; (define (list . lst) +; (if (pair? lst) +; (cons (car lst) +; (apply list (cdr lst))) +; lst)) + +#0=#S(#="lambda" + ; (define (list . lst) + ; ((if (pair? lst) + ; (lambda () (cons (car lst) + ; (apply list (cdr lst)))) + ; (lambda () lst)))) + #( + #S(#="template" + ; (lambda () lst) + #(#f) + "\xfd" ; argv=lst + 1 + "\x02\x80\x40\x00"; (set! f0 (cons i0 nil)) + 0xfe ; k + 0x80 ; f0 + 0x01 ; g1 + 0x01 ; g1 + ) + #S(#="template" + ; (lambda () + ; (let/cc k + ; (let ([lstcar (car lst)]) + ; (call-with-multiple-values + ; (lambda (v) (k (cons lstcar v))) + ; (lambda () (apply list (cdr lst))))) + #( + #S(#="template" + ; (lambda (v) (k (cons lstcar v))) + #(#f) + "\x81\xfe" ; f1 k + 1 + "\x00\x80\x03\xfd\; (set! f0 (car argv)) + \x02\x80\x40\x80\; (set! f0 (cons i0 f0)) + \x02\x80\x80\x00"; (set! f0 (cons f0 nil)) + 0x41 ; i1 + 0x80 ; f0 + 0x01 ; g1 + 0x01 ; g1 + ) + #=0 ; list + ) + "\xfd" ; argv=lst + 3 + "\x00\x80\x04\x40\; (set! f0 (cdr i0)) + \x00\x81\x03\x40\; (set! f1 (car i0)) + \x00\x82\x1b\x01"; (set! f2 (lambda g1)) + 0x02 ; g2 + 0x80 ; f0 + 0x82 ; f2 + 0xff ; ctx + ) + ) + #() + 1 + "\x00\x80\x0b\xfd\; (set! f0 (pair? argv)) + \x80\x80\x02\x01\; (set! f0 (if f0 g2 g1)) + \x00\x80\x1b\x80"; (set! f0 (lambda f0)) + 0x80 ; f0 + 0x00 ; nil + 0xfe ; k + 0xff ; ctx +) +; vim:set syntax= sw=2 expandtab: