summaryrefslogtreecommitdiffstats
path: root/examples/fact.scm
diff options
context:
space:
mode:
Diffstat (limited to 'examples/fact.scm')
-rw-r--r--examples/fact.scm22
1 files changed, 22 insertions, 0 deletions
diff --git a/examples/fact.scm b/examples/fact.scm
new file mode 100644
index 0000000..af56eb7
--- /dev/null
+++ b/examples/fact.scm
@@ -0,0 +1,22 @@
+(define (fact n)
+ (if (= n 0)
+ 1
+ (* n (fact (- n 1)))))
+
+(define (fact/cps n cont)
+ (if (= n 0)
+ (cont 1)
+ (fact/cps (- n 1) (lambda (a) (cont (* n a))))))
+
+(define num 11)
+
+(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))