On Wed, Aug 31, 2005 at 08:30:12PM +0100, Tony Garnock-Jones wrote:
> > True, but the implementation is already there for those who want
> > something rigorous. :)
> So long as the implementation is *normative* and not simply
> *informative*, then fine. That needs to be made clear, though.

No, the problem is exactly that the implementation is half-normative,
half-informative.  If I specify the behaviour of e.g.
hash-table-ref/default by writing code, I must also specify just how
normative the implementation is.  For example, if I said:

        hash-table-ref/default

        Behaves as if defined by
        (define (hash-table-ref/default ht key default)
          (hash-table-ref ht key (lambda () default)))

Then, is this a valid implementation anymore:

(define (hash-table-ref/default ht key default)
  (set! *log* (cons "hash-table-ref/default called" *log*))
  (hash-table-ref ht key (lambda () default)))

?  I would say it is not, because it does not behave anymore as if it
was defined as in the spec.  (value-)equivalence of expressions is
better because it makes contracts about the return value of a function
only.

I think I'm going for the "evaluates to" version, unless further
discussion emerges.

> > It's just that viewed differently, (hash-table-ref) can be seen as a
> > kind of control structure, similar to (and) or (if).
> Careful! The logical endpoint of this kind of thought is normal-order
> evaluation... :)

Indeed.

Panu

-- 
personal contact: [EMAIL PROTECTED], +35841 5323835, +3589 85619369
work contact: [EMAIL PROTECTED], +35850 3678003
kotisivu (henkkoht):    http://www.iki.fi/atehwa/
homepage (technical):   http://sange.fi/~atehwa/

Reply via email to