On 09/26/2012 04:46 PM, Norman Gray wrote:
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: 0With #f uncommented, it works as expected: Welcome to DrRacket, version 5.3 [3m]. Language: racket; memory limit: 128 MB. msg begin:secondThe 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.
Here's what the documentation means: There must be at least two arguments. The first two arguments are 'sema' and 'proc'. If there are three or more arguments, the third argument is 'try-fail-thunk'. If there are four or more arguments, all arguments starting with the fourth argument are collected in a list for the 'args' rest argument.
---- 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?
It's probably an oversight. Ryan ____________________ Racket Users list: http://lists.racket-lang.org/users

