Lambda The Ultimate: use failure-thunk instead of default value?
Tony Garnock-Jones
(07 Jul 2005 09:58 UTC)
|
Re: Lambda The Ultimate: use failure-thunk instead of default value? Panu Kalliokoski (07 Jul 2005 12:25 UTC)
|
Re: Lambda The Ultimate: use failure-thunk instead of default value?
Tony Garnock-Jones
(07 Jul 2005 13:14 UTC)
|
Re: Lambda The Ultimate: use failure-thunk instead of default value?
Panu A Kalliokoski
(08 Jul 2005 14:19 UTC)
|
Re: Lambda The Ultimate: use failure-thunk instead of default value?
Thien-Thi Nguyen
(08 Jul 2005 06:21 UTC)
|
Re: Lambda The Ultimate: use failure-thunk instead of default value? Panu Kalliokoski 07 Jul 2005 12:25 UTC
On Thu, Jul 07, 2005 at 10:58:06AM +0100, Tony Garnock-Jones wrote: > (hash-table-get valmap id > (lambda () (error "Object does not contain slot" > (desc-id-and-slot id slotname)))) I've also thought about this. I know the thunk version is more expressive. However, I also think that a simple default value is the common case. I'd like to have both. You propose using (always) or, why not, (value->thunk): > (define (always something) (lambda () something)) > (hash-table-get *forward-slots* id (always #f)) But it is not so neat and I should probably provide this routine as a part of this SRFI to prevent people writing it again and again. OTOH, it does not strictly "belong" into this SRFI. (Maybe somebody should write a SRFI for combinators?) Another option would be to treat defaults that satisfy procedure? specifically. But this might confuse people. It does not make the construction less expressive, though, as one can give really-procedure-defaults as: (hash-table-get ht key (lambda () (lambda ...))) I'd like to hear more opinions on this. Another complication is that I posted a final version of the SRFI some three days ago. I'm not sure what the SRFI process says about this. > rather than: > (let* ((*failure* "failure") > (result (hash-table-get valmap id *failure*))) > (if (eq? result *failure*) > (error "Object does not contain slot" > (desc-id-and-slot id slotname)) > result)) "failure" is not even guaranteed to be unique. Rather use something like (define *failure* (list '*failure*)) Panu -- personal contact: xxxxxx@iki.fi, +35841 5323835, +3589 85619369 work contact: xxxxxx@ling.helsinki.fi, +35850 3678003 kotisivu (henkkoht): http://www.iki.fi/atehwa/ homepage (technical): http://sange.fi/~atehwa/