diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2018-06-08 17:57:01 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2018-06-08 18:00:50 +0900 |
commit | 0d0e1dbd33f978edb544f878458636861bcbe286 (patch) | |
tree | 136309ff84a27971ba425c380dcdf5a9085b62ec | |
parent | 6a1fa7db286c9cda11a1847affd688b9e5f80c08 (diff) | |
download | mini-scheme-0d0e1dbd33f978edb544f878458636861bcbe286.tar.gz |
-rw-r--r-- | examples/callcc.scm | 6 | ||||
-rw-r--r-- | examples/count_up_display.scm | 4 | ||||
-rw-r--r-- | examples/even-odd.scm | 6 | ||||
-rw-r--r-- | examples/fact.scm | 12 | ||||
-rw-r--r-- | examples/return.scm | 8 | ||||
-rw-r--r-- | examples/test.scm | 11 | ||||
-rw-r--r-- | ss/compile.cpp | 2 |
7 files changed, 29 insertions, 20 deletions
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) |