[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Problems with field initialization: Proposal



 Andre wrote: 
  
 > Perhaps another keyword clause
 > 
 >    (constructor <expression>)
 > 
 > which can be left out for the default constructor.
  

 As an example, the hash-table example could be expressed:

  (define-type hash-table
    (constructor (k) (lambda (pred hasher size)
                       (k pred
                          hasher
                          (make-vector (nearest-prime size))
                          0)))         
    (fields (pred   immutable)
            (hasher immutable)
            (data   mutable)
            (count  mutable))))

  (define-type eq-hash-table
    (parent hash-table)
    (constructor (k) (lambda (pred hasher size)
                       (k pred
                          hasher
                          size
                          0)))
    (fields (gc-count mutable)))

 All the initialization information is in a single place, and both 
 the parent clause and the field clauses simplify.  
    
 A record type with the default constructor ordering would simply
 omit the constructor clause:   
    
   (define-type point 
     (fields (x mutable)
             (y mutable)))
   
 which is actually a little more concise than the current specification.
 
 We don't need the INIT! clause any longer.  The last example from the 
 document becomes:
 
   (define-type cpoint
     (parent point)
     (constructor (k) (lambda (x y c)
                        (set! *the-cpoint*
                              (k x
                                 y
                                 (color->rgb c)))
                        *the-cpoint*))
     (fields (rgb mutable)))
 
 
 So again, all the initialization information is in a single place.
 
 
 Cheers
 Andre