Implemented cintinuations and call/cc
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
(define add-5 '())
|
||||
(define res 1)
|
||||
|
||||
(mutate! res (+ 2 (call/cc (lambda (cont) (set! add-5 cont) 1)) 3))
|
||||
(assert (= res 6))
|
||||
|
||||
(add-5 100)
|
||||
(assert (= res 105))
|
||||
|
||||
(add-5 10)
|
||||
(assert (= res 15))
|
||||
|
||||
|
||||
;; ----------- works until here ---------------
|
||||
|
||||
|
||||
(set! res (+ 2 (call/cc (lambda (cont) (set! add-5 cont) 1)) 3))
|
||||
;; (print)
|
||||
;; (print res 6)
|
||||
(assert (= res 6))
|
||||
|
||||
(add-5 100)
|
||||
;; (print res 105)
|
||||
(assert (= res 105))
|
||||
|
||||
(add-5 10)
|
||||
(assert (= res 15))
|
||||
;; (print res 15)
|
||||
|
||||
;; (define fun '())
|
||||
|
||||
;; (mutate! res (apply (call/cc (lambda (k) (set! fun k) +)) (list 1 2 3)))
|
||||
|
||||
;; (assert (= res 6))
|
||||
;; (fun -)
|
||||
;; (assert (= res -1))
|
||||
@@ -3,7 +3,8 @@
|
||||
(define (make-counter)
|
||||
(let ((var 0))
|
||||
(lambda ()
|
||||
(set! var (+ 1 var)))))
|
||||
(set! var (+ 1 var))
|
||||
var)))
|
||||
|
||||
(define counter1 (make-counter))
|
||||
|
||||
|
||||
@@ -1 +1,7 @@
|
||||
;; (define (empty-function-body-test))
|
||||
(define (empty-function-body-test))
|
||||
|
||||
;; test that arguments to apply are only evaled once
|
||||
(define counter 0)
|
||||
(assert (= (apply (lambda (x) x) (begin (mutate! counter (+ 1 counter)) (list +)))
|
||||
+))
|
||||
(assert (= counter 1))
|
||||
|
||||
Reference in New Issue
Block a user