Столкновение двух ракетных модулей - PullRequest
0 голосов
/ 16 декабря 2018

Мне требуется два модуля для моего файла:

(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!

Проблема: обе библиотеки используют разные варианты схемы.Sicp-параллелизм использует mzscheme.Требование этого модуля не позволило мне использовать else в предложении cond.

Есть ли способ предотвратить использование функций mzscheme в sicp-concurrency, в то же время все еще используя необходимые мне процедуры?

1 Ответ

0 голосов
/ 16 декабря 2018

Я обновил код Дэнни Ю до Racket 7. Получите новый файл "sicp-concurrency.rkt" здесь:

https://gist.github.com/soegaard/d32e12d89705c774b71ee78ef930a4bf

Сохраните файл в той же папке, что и вашпрограммный файл.Вот пример использования:

#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)
...