From 0d0e1dbd33f978edb544f878458636861bcbe286 Mon Sep 17 00:00:00 2001 From: Kazuki Yamaguchi Date: Fri, 8 Jun 2018 17:57:01 +0900 Subject: up --- examples/callcc.scm | 6 ++++++ examples/count_up_display.scm | 4 ++++ examples/even-odd.scm | 6 ++++++ examples/fact.scm | 12 ++---------- examples/return.scm | 8 ++++++++ examples/test.scm | 11 ++--------- ss/compile.cpp | 2 +- 7 files changed, 29 insertions(+), 20 deletions(-) create mode 100644 examples/callcc.scm create mode 100644 examples/count_up_display.scm create mode 100644 examples/even-odd.scm create mode 100644 examples/return.scm diff --git a/examples/callcc.scm b/examples/callcc.scm new file mode 100644 index 0000000..54e1405 --- /dev/null +++ b/examples/callcc.scm @@ -0,0 +1,6 @@ +(define return #f) +(display (+ 10 (call/cc + (lambda (cont) + (set! return cont) + 1)))) +(display (return 1000)) diff --git a/examples/count_up_display.scm b/examples/count_up_display.scm new file mode 100644 index 0000000..d23f374 --- /dev/null +++ b/examples/count_up_display.scm @@ -0,0 +1,4 @@ +(define (loop n) + (display n) + (loop (+ 1 n))) +(loop 1) diff --git a/examples/even-odd.scm b/examples/even-odd.scm new file mode 100644 index 0000000..e2ef631 --- /dev/null +++ b/examples/even-odd.scm @@ -0,0 +1,6 @@ +(define (even? x) + (if (= x 0) #t (odd? (- x 1)))) +(define (odd? x) + (if (= x 1) #t (even? (- x 1)))) + +(display (even? 99)) diff --git a/examples/fact.scm b/examples/fact.scm index af56eb7..1a20589 100644 --- a/examples/fact.scm +++ b/examples/fact.scm @@ -8,15 +8,7 @@ (cont 1) (fact/cps (- n 1) (lambda (a) (cont (* n a)))))) -(define num 11) +(define num 11000) -(display (string-append "fact: " (number->string (fact num)))) (display (string-append "fact/cps: " (number->string (fact/cps num (lambda (x) x))))) - - (define return #f) - -(display (+ 1 (call/cc - (lambda (cont) - (set! return cont) - 1)))) -(display (return 23)) +(display (string-append "fact: " (number->string (fact num)))) diff --git a/examples/return.scm b/examples/return.scm new file mode 100644 index 0000000..e543a72 --- /dev/null +++ b/examples/return.scm @@ -0,0 +1,8 @@ +(define (f) + (call/cc (lambda (escape) + (begin + (display 1) + (display 2) + (escape 10) + (display 3))))) +(display (f)) diff --git a/examples/test.scm b/examples/test.scm index 05967f3..fb254a5 100644 --- a/examples/test.scm +++ b/examples/test.scm @@ -1,14 +1,7 @@ ;(display (quote (1 2 3))) -;; (define (assert x msg) -;; (if (not x) (display (string-append "NG" msg)))) -;; -;; -;; (define (x y . z) (display (cons y z))) -;; (assert (equal? )) - (define (sum n) (if (= n 0) n (+ n (sum (- n 1))))) (define (sumi n acc) (if (= n 0) acc (sumi (- n 1) (+ n acc)))) -(display (sumi 1000000 0)) -(display (sum 1000000)) +(display (sumi 100000 0)) +(display (sum 100000)) diff --git a/ss/compile.cpp b/ss/compile.cpp index d73a5f8..af93874 100644 --- a/ss/compile.cpp +++ b/ss/compile.cpp @@ -555,7 +555,7 @@ private: lambda_params = shield.new_pair(dollar, lambda_params); // ((lambda ...) DUP ...defs) emit_lambda(lambda_params, shield.new_pair(lambda_body, nil)); - dump(lambda_body); + //dump(lambda_body); emit(Instruction::DUP); for (size_t i = 0; i < defs.size(); i++) if (feed_exp(defs[i]) < 0) -- cgit v1.2.3