Hi everyone! I'm working on my first program in Chicken Scheme. I've got five 
or six long-running threads, plus workers spun out occasionally. A couple of 
the long-running ones act like services: they listen for requests in a mailbox, 
do a thing, then respond. 

One of those is supposed to block its caller, so the caller thread passes 
itself in the request, sends, then suspends itself. The service does its job 
then resumes the thread indicated in the request, ie the caller.

In another case I want to pass a value back, so the caller makes a mailbox and 
passes that in the request.

Now say something goes wrong. I want the caller to know. In the first case I 
have the thread; I can use thread-signal!. In the second case I have to add 
more, eg pass the caller thread *and* a mailbox.

Is there an elegant way I've missed that lets me get back (a) a value, or (b) a 
resumption, or (c) a condition, with one mechanism?

Also I'm from Python land, where exceptions are never resumable. The YouTube 
talks about Common Lisp rave about conditions, mostly in the context of 
interactive development ("Call a function that doesn't exist yet!" etc). Now 
here I see exceptions and conditions, and they are well enough documented that 
I can catch them, but I don't feel like I really understand them. Where does 
one learn about Scheme conditions and why they are what they are and not 
something different?

Reply via email to