bear wrote:
> On Wed, 23 Apr 2003, Michael Burschik wrote:
>>>>It might also be mentioned that the return
>>>>value is ambiguous with regard to #f, [...]
>>>
>>>Can you think of a better thing to do in this case?
>>
>>I can think of no elegant solution. Of course, you could always return
>>both the index and the element found.
>
> In my hash table library there is an optional third argument
> to the lookup function. It's the value to return in case
> you don't find something.
PLT's MzScheme does a similar thing, except passes a failure-thunk
instead of a failure-value:
(hash-table-get htable key (lambda () #f))
This I guess also permits (raise ...) in a more direct style than
fabricating a unique failure-token and then checking for it in the caller:
(hash-table-get htable key (lambda () (raise ...)))
vs.
(let* ((token (cons '() '()))
(val (hash-table-get htable key token)))
(if (eq? val token)
(raise ...)
val))
I think MzScheme also lets that third parameter be optional, defaulting
to (lambda () #f), just as you suggest.
Tony