So basically you are trying to deal with missing values in collections.

People working with R or Python data analytics framework made some
ways to work with specific data structures called dataframes
where you can have some missing values.

For example you may have a look here:
http://pandas.pydata.org/pandas-docs/stable/missing_data.html


On Wed, Dec 21, 2016 at 4:15 AM, stepharong <stephar...@free.fr> wrote:
> Hi dear great OO designers
>
> Here is a little challenges for your brainy souls :)
>
> In Moose when we compute metrics it may happen than a tool (often external
> to pharo) does not compute a metrics
> and when we request it in moose we check and often we return a not so good
> -1.
>
> I'm trying to brainstorm on a solution
>
> - first may be the simplest way is to not invoke a metrics when it is not
> computed. But it means that we should know it and that we should have a
> registration mechanism. After all this is probably the best solution.
>
> - Second we were thinking to use exception but when we have multiple
> entities missing one metrics.... I have serious doubts.
>
> - Second I was thinking about having the following behavior
>
> testCollect
>
>         | uarray collected |
>         uarray := UniformOrderedCollection new.
>         uarray add: 10.
>         uarray add: 20.
>         uarray add: (MissingValue discarding).
>         collected := uarray collect: [ :each | each ].
>         self assert: collected size equals: 2.
>
> testDo
>
>         | res uarray |
>         uarray := UniformOrderedCollection new.
>         uarray add: 10.
>         uarray add: 20.
>         uarray add: (MissingValue discarding).
>         uarray add: 40.
>         res := 0.
>         uarray do: [ :each | res := res + each ].
>         self assert: res equals: 70.
>
>
> testCollectDefaulting
>
>         | uarray collected |
>         uarray := UniformOrderedCollection new.
>         uarray add: 10.
>         uarray add: 20.
>         uarray add: (MissingValue default: 33).
>         collected := uarray collect: [ :each | each ].
>         self assert: collected size equals: 3.
>         self assert: collected third equals: 33
>
>
> I basically started to implement
>
>
> do: aBlock
>         "Refer to the comment in Collection|do:."
>         1 to: self size do:
>                 [:index | (self at: index) toDo: aBlock on: self]
>
>
>
> collect: aBlock
>         "Evaluate aBlock with each of the receiver's elements as the
> argument.
>         Collect the resulting values into a collection like the receiver.
> Answer
>         the new collection."
>
>         | newCollection |
>         newCollection := self species new.
>         self
>                 do: [ :each | each toCollect: aBlock on: newCollection ].
>         ^ newCollection
>
>
> and
>
> DiscardingValue >> toCollect: aBlock on: aCollection
>         "discard computation"
>         ^ self
>
>
> Object >> toCollect: aBlock on: aCollection
>
>         ^ aCollection add: (aBlock value: self)
>
>
> So I imagine that you see the design and I wanted to get your point of view.
>
> --
> Using Opera a kind of bad mail client but far better than thunderbird
> _______________________________________________
> Moose-dev mailing list
> moose-...@list.inf.unibe.ch
> https://www.list.inf.unibe.ch/listinfo/moose-dev



-- 
Serge Stinckwich
UCBN & UMI UMMISCO 209 (IRD/UPMC)
Every DSL ends up being Smalltalk
http://www.doesnotunderstand.org/

Reply via email to