Hi David,
> What would you recommend I do to store a list of 3 values as the value of a
> relation in a class? A class for the list of 3 values or some other better
> way?
>
> (class +ALH +Entity)
> (rel actual (+Need +Number)) # Actual value
> (rel lo (+Need +Number)) # Low value
> (rel hi (+Need +Number)) # High value
> ...
> (class +Scores +Entity)
> (rel round1 (+Need +ALH)) # Round 1
> (rel round2 (+Need +ALH)) # Round 2
> (rel round3 (+Need +ALH)) # Round 3
The "natural" way is the '+List' relation in combination with '+Bag',
defining a two-dimensional list:
(class +Scores +Entity)
(rel rnd (+List +Bag)# Rounds
((+Number) 2)# Actual value
((+Number) 2)# Low value
((+Number) 2) ) # High value
Advantages are that the list is not limited in length, and that it
directly maps to the GUI with a +Chart:
(gui '(+E/R +Chart) '(rnd : home obj) 5)
( NIL NIL
'((NIL "Actual") (NIL "Low") (NIL "High"))
(do 8
( NIL
(gui 1 '(+FixField) 2 10)# Actual value
(gui 2 '(+FixField) 2 10)# Low value
(gui 3 '(+FixField) 2 10)# High value
(gui 4 '(+DelRowButton)) # Delete-row button
(gui 5 '(+BubbleButton)) ) ) ) # Bubble-button
(scroll 8 T)
> Then use a helper function as sugar when creating a +Scores object:
> (de new-ALH (actual lo hi)
>(new '(+ALH) 'actual actual 'lo lo 'hi hi) )
Note that this is not quite correct. Calling 'new' in this way will
create an object in memory, not a DB object. You probably meant
(new (db: +ALH) '(+ALH) ...
or
(new! '(+ALH) ...
With the above model, you could do (assuming a '*Scl' of 2):
(new! '(+Scores) 'rnd '((2.0 0.0 3.0) (4.0 1.0 7.0)) ...)
At runtime, you can also set the 'rnd' value either completely
(put!> MyScores 'rnd '((2.0 0.0 3.0) (4.0 1.0 7.0) ...))
or partially
(put!> MyScores 'rnd (4.0 1.0 7.0))
In the second case the +Bag will take care of 'cons'ing the
one-dimensional list into the two-dimensional bag.
> this. Also, how could I handle floats rather than integers, say to two
> places? With the format function? Thank you in advance for your help.
Yes. Internally it all boils down to 'format'. An E/R definition like
(rel x (+Number) 2)
tells the system that you expect a scaled integer with two decimal
places, but it is the programmer's duty to take care of it, i.e. using
the right '*Scl' for the reader, and GUI components like
(gui '(+FixField) 2 10)
^
to handle the formatting.
♪♫ Alex
--
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe