Re: Problems with field initialization: Proposal
Andre van Tonder 16 Sep 2005 18:21 UTC
Mike Sperber wrote:
> - Add a LET clause that introduces a binding into the constructor like
> so:
>
> (define-type rational (x y)
> (let ((common (gcd x y))))
> (fields
> (num (rational-num) (/ x common))
> (denom (rational-denom) (/ y common))))
Would you perhaps consider a slight variation of this:
(define-type rational (x y)
(let ((common (gcd x y)))
(field-values
(num (/ x common))
(denom (/ y common))))
(fields (num (rational-num))
(denom (rational-denom))))
It is only slightly more verbose, but now it can handle this:
(define-type rational (x y)
(if (= y 0)
(field-values (num 1)
(denom 0))
(let ((common (gcd x y)))
(field-values
(num (/ x common))
(denom (/ y common)))))
(fields (num (rational-num))
(denom (rational-denom))))
Andre