On Sun, May 26, 2013 at 7:49 AM, Alexey Radul <[email protected]> wrote:

>
> 2) Universal lookup procedure
>
> I am fond of the following universal lookup procedure [1]:
>   (hash-table-search table key
>     (lambda (value update remove)
>       ...)
>     (lambda (insert)
>       ...))
>

This is very nice, and it's important to provide fundamental
operations such as this which allow arbitrary ref+update logic
without requiring the hash to be recomputed.  This is not
possible in either the SRFI-69 or R6RS APIs (though an impl
may cache one or more recently hashed values).

I also think the following utility is nice, as there is no other
existing utility to use a hash-table as a cache with a single
operation:

  (hash-table-ref/cache! table key thunk)
  => (hash-table-search
      table key
      (lambda (value update remove)
        value)
      (lambda (insert)
        (let ((res (thunk)))
          (insert res)
          res)))

-- 
Alex
_______________________________________________
Scheme-reports mailing list
[email protected]
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports

Reply via email to