Email list hosting service & mailing list manager

Re: Problems with field initialization: Proposal Andre van Tonder (16 Sep 2005 18:21 UTC)
Re: Problems with field initialization: Proposal Michael Sperber (20 Sep 2005 10:07 UTC)
Re: Problems with field initialization: Proposal Andre van Tonder (20 Sep 2005 15:40 UTC)
Re: Problems with field initialization: Proposal Andre van Tonder (20 Sep 2005 16:11 UTC)

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