Код Ревью

Сравни свои решения

    #| BEGIN (Write your solution here) |#
(define (make-semaphore n)
  (when (< n 1) (error "Size is less then 1 -- MAKE-SEMAPHORE"))
  (let ((count n)
        (m (make-mutex)))
    (define (acquire)
      (let loop ()
        (m 'acquire)
        (cond ((> count 0)
               (set! count (- count 1))
               (m 'release))
              (else
               (m 'release)
               (loop)))))
    (define (release)
      (m 'asquire)
      (set! count (+ count 1))
      (m 'release))
    (define (dispatch m)
      (cond ((eq? m 'acquire) (acquire))
            ((eq? m 'release) (release))
            ((eq? m 'count) count)))
    dispatch))
#| END |#