summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/callcc.scm6
-rw-r--r--examples/count_up_display.scm4
-rw-r--r--examples/even-odd.scm6
-rw-r--r--examples/fact.scm12
-rw-r--r--examples/return.scm8
-rw-r--r--examples/test.scm11
-rw-r--r--ss/compile.cpp2
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)