Functional programming 我可以在Scheme中使用continuations生成三个函数的共同例程吗?

Functional programming 我可以在Scheme中使用continuations生成三个函数的共同例程吗?,functional-programming,scheme,racket,continuations,Functional Programming,Scheme,Racket,Continuations,是否可以在此处添加另一个函数procC,以便计算顺序为procA->procB->procC->procA (define (procA another-fun) (let loop ((n 5)) (display "In Proc A \n") (set! another-fun (call/cc another-fun)) (when (> n 0) (loop (- n 1))))) (define (procB another-fun)

是否可以在此处添加另一个函数procC,以便计算顺序为procA->procB->procC->procA

(define (procA another-fun)
  (let loop ((n 5))
    (display "In Proc A \n")
    (set! another-fun (call/cc another-fun))
    (when (> n 0)
      (loop (- n 1)))))

(define (procB another-fun)
  (let loop ((n 5))
    (display "In Proc B  \n")
    (set! another-fun (call/cc another-fun))
    (when (> n 0)
      (loop (- n 1)))))
来自“Scheme编程语言”

来自“Scheme编程语言”

像这样的

(define (puts . lst)
  (map display lst)
  (newline))

(define (A some-fun more-fun)
  (let loop ((n 3))
    (puts "In A with " some-fun " and " more-fun " and n=" n)
    (let-values (((s m) (call/cc (lambda (next-iter) (some-fun more-fun next-iter)))))
      (set! some-fun s)
      (set! more-fun m))
    (when (> n 0) (loop (- n 1)))))
(define (B some-fun more-fun)
  (let loop ((n 3))
    (puts "In B with " some-fun " and " more-fun " and n=" n)
    (let-values (((s m) (call/cc (lambda (next-iter) (some-fun more-fun next-iter)))))
      (set! some-fun s)
      (set! more-fun m))
    (when (> n 0) (loop (- n 1)))))
(define (C some-fun more-fun)
  (let loop ((n 3))
    (puts "In C with " some-fun " and " more-fun " and n=" n)
    (let-values (((s m) (call/cc (lambda (next-iter) (some-fun more-fun next-iter)))))
      (set! some-fun s)
      (set! more-fun m))
    (when (> n 0) (loop (- n 1)))))

(A B C)
像这样的

(define (puts . lst)
  (map display lst)
  (newline))

(define (A some-fun more-fun)
  (let loop ((n 3))
    (puts "In A with " some-fun " and " more-fun " and n=" n)
    (let-values (((s m) (call/cc (lambda (next-iter) (some-fun more-fun next-iter)))))
      (set! some-fun s)
      (set! more-fun m))
    (when (> n 0) (loop (- n 1)))))
(define (B some-fun more-fun)
  (let loop ((n 3))
    (puts "In B with " some-fun " and " more-fun " and n=" n)
    (let-values (((s m) (call/cc (lambda (next-iter) (some-fun more-fun next-iter)))))
      (set! some-fun s)
      (set! more-fun m))
    (when (> n 0) (loop (- n 1)))))
(define (C some-fun more-fun)
  (let loop ((n 3))
    (puts "In C with " some-fun " and " more-fun " and n=" n)
    (let-values (((s m) (call/cc (lambda (next-iter) (some-fun more-fun next-iter)))))
      (set! some-fun s)
      (set! more-fun m))
    (when (> n 0) (loop (- n 1)))))

(A B C)