On 05/31/2012 09:50 AM, Sam Tobin-Hochstadt wrote:
On Thu, May 31, 2012 at 11:42 AM, Neil Toronto<[email protected]> wrote:
Currently, the floating-point bitmap type is defined so that its size fields
are Integer, and a guard assures that they're really Nonnegative-Fixnum:
(struct: flomap ([values : FlVector]
[components : Integer]
[width : Integer]
[height : Integer])
#:transparent
#:guard
(λ (vs c w h name)
(with-asserts ([c nonnegative-fixnum?]
[w nonnegative-fixnum?]
[h nonnegative-fixnum?])
[...] ; elided length check on vs
(values vs c w h))))
What I'd *really* like, though, is to have the fields be Nonnegative-Fixnum
in the first place, and simply have a more permissive constructor. Is there
a way to do that? As it is, `flomap-components' always returns an Integer,
but no flomap instance can actually have an integer-valued `components'
field.
Could you just structure the program this way?
(struct: flomap ([values : FlVector]
[components : Nonnegative-Fixnum]
[width : Integer]
[height : Integer])
#:transparent)
(: make-flomap : FlVector Integer Integer Integer -> flomap)
(define (make-flomap v c w h)
(with-asserts ... (flomap v c w h)))
I could, but `make-flomap' is already defined and used extensively (it's
an analogue of make-flvector). Also, not using the structure name to
create instances from their field values now makes me feel dirty. :D
Neil ⊥
____________________
Racket Users list:
http://lists.racket-lang.org/users