diff --git a/cyclone.scm b/cyclone.scm index 5b6dc8c2..f0707a6b 100644 --- a/cyclone.scm +++ b/cyclone.scm @@ -133,18 +133,23 @@ (set! globals (cons 'call/cc globals)) (set! module-globals (cons 'call/cc module-globals)) (set! input-program - ;(cons - ; '(define call-with-values - ; (lambda (k producer consumer) - ; (producer - ; ) + (cons + ;; Experimental version of call-with-values, but this + ;; is not working yet! + '(define call-with-values + (lambda (k producer consumer) + (producer + (lambda (val) + (consumer k val))))) + ;(lambda vals + ; (apply k consumer vals))))) (cons ;; call/cc must be written in CPS form, so it is added here ;; TODO: prevents this from being optimized-out ;; TODO: will this cause issues if another var is assigned to call/cc? '(define call/cc (lambda (k f) (f k (lambda (_ result) (k result))))) - cps)));) + cps)))) (else ;; No need for call/cc yet (set! input-program cps)))) diff --git a/scheme/base.sld b/scheme/base.sld index 45b0caad..2447174a 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -6,6 +6,7 @@ ;delete-duplicates call-with-current-continuation call/cc + call-with-values values ;(Cyc-bin-op cmp x lst) ;(Cyc-bin-op-char cmp c cs)