Greetings

The behaviour of call-with-semaphore doesn't appear to match the documentation, 
or else I'm misunderstanding the documentation.

Consider:

(define (printit m)
  (printf "msg begin:~a~%" m))
(define try
  (let ((sema (make-semaphore 1)))
    (λ (msg)
      (call-with-semaphore sema
                           printit
                           ;#f
                           msg))))
(try "second")

With #f commented out, I get (with Racket 5.3):

call-with-semaphore: procedure arity does not match extra-argument count
  procedure: #<procedure:printit>
  extra-argument count: 0
> 

With #f uncommented, it works as expected:

Welcome to DrRacket, version 5.3 [3m].
Language: racket; memory limit: 128 MB.
msg begin:second
> 

The documentation says:

(call-with-semaphore            sema                             
                proc                             
         [      try-fail-thunk]                          
                arg ...)                →               any

However it appears that the try-fail-chunk argument is not in fact optional.

----

Separately, it appears that CALL-WITH-SEMAPHORE returns the value that (proc 
args…) returns.  However the documentation doesn't actually say that.  Is that 
just an oversight, or is the return value of CALL-WITH-SEMAPHORE undefined?

Best wishes,

Norman


-- 
Norman Gray  :  http://nxg.me.uk
SUPA School of Physics and Astronomy, University of Glasgow, UK


____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to