Module 两个球拍模块相撞

Module 两个球拍模块相撞,module,scheme,lisp,racket,sicp,Module,Scheme,Lisp,Racket,Sicp,我的文件需要两个模块: (require sicp) ; contains set-car! and set-cdr! (require (planet dyoo/sicp-concurrency:1:2/sicp-concurrency)) ; contains procedures parallel-execute and test-and-set! 问题:两个库使用不同风格的scheme。sicp并发使用mzscheme。由于需要此模块,我无法在cond子句中使用else 是否有一种方法

我的文件需要两个模块:

(require sicp) ; contains set-car! and set-cdr!
(require (planet dyoo/sicp-concurrency:1:2/sicp-concurrency)) ; contains procedures parallel-execute and test-and-set!
问题:两个库使用不同风格的scheme。sicp并发使用mzscheme。由于需要此模块,我无法在cond子句中使用else


是否有一种方法可以防止在sicp并发中使用mzscheme的功能,同时仍然使用我需要的过程?

我已将Danny Yoo的代码更新为Racket 7。 在此处获取新文件“sicp concurrency.rkt”:

将文件保存在与程序文件相同的文件夹中。 以下是一个使用示例:

#lang sicp
(#%require "sicp-concurrency.rkt")

(define (test-1)
  (define x 10)
  (parallel-execute (lambda () (set! x (* x x)))
                    (lambda () (set! x (+ x 1))))
  x)

(define (test-2)
  (define x 10)
  (define s (make-serializer))
  (parallel-execute (s (lambda () (set! x (* x x))))
                    (s (lambda () (set! x (+ x 1)))))
  x)

(test-1)
(test-1)
(test-1)
(test-1)
(test-1)