;; The first three lines of this file were inserted by DrScheme. They record metadata ;; about the language level of this file in a form that our tools can easily process. #reader(planet plai/plai:1:6/lang/reader) (define queue empty) (define (empty-queue?) (empty? queue)) (define (enqueue x) (set! queue (append queue (list x)))) (define (dequeue) (let ((x (first queue))) (set! queue (rest queue)) x)) (define (fork) (let/cc k (begin (enqueue (lambda () (k 1))) 0))) (define (join) (if (not (empty-queue?)) ((dequeue)) 'alljoined)) (define (yield) (let/cc k (enqueue k) ((dequeue)))) (define (fact n) (if (zero? n) 1 (* n (fact (- n 1))))) (define (fib n) (if (< n 2) 1 (+ (fib (- n 1)) (fib (- n 2))))) (define (printfibs n) (if (zero? n) (begin (print "Fertig mit fibs") (newline)) (begin (print (format "Fib(~A)=~A" n (fib n))) (newline) (yield) (printfibs (- n 1))))) (define (printfacts n) (if (zero? n) (begin (print "Fertig mit facts") (newline)) (begin (print (format "Fact(~A)=~A" n (fact n))) (newline) (yield) (printfacts (- n 1))))) (if (= (fork) 0) (printfibs 8) (printfacts 12)) (join) (if (= (fork) 0) (printfibs 10) (printfacts 8)) (join)