>
> # reducing with a single polynomial list gives just the polynomial back
> reduce(+, [p1])
> > p1
>
Doesn't this just work? It does for me.
# reducing with an empty list gives back the 0 polynomial
> reduce(+, [])
> > ZeroPoly
If you ensure that the array is correctly typed (eg: Poly[] ), you get:
julia> reduce(+, Poly[])
ERROR: `zero` has no method matching zero(::Type{Poly})
in _mapreduce at reduce.jl:174
in mapreduce at reduce.jl:196
in reduce at reduce.jl:204
Which indicates that everything might work fine, if you define something
like:
Base.zero(::Type{Poly}) = Poly(0)
and it sure does for me.
kl. 02:33:29 UTC+1 onsdag 5. november 2014 skrev James Porter følgende:
>
> To get an empty list of polynomials, you can type `Poly[]`. I wouldn't
> recommend changing the behavior of the built in reduce function though,
> that would definitely be confusing for anyone else who later wants to work
> with your module (and who will reasonably expect Base.reduce to return a
> list). I would just handle the transformation of the empty list into
> ZeroPoly elsewhere in your code. A nice thing to do might be to define your
> own reduce function in your module (so Polynomials.reduce, or
> Polynomials.polyreduce or something as opposed to Base.reduce) that wraps
> Base.reduce and provides this behavior.
>
>
> On Tuesday, November 4, 2014 5:20:53 PM UTC-6, Evan Pu wrote:
>>
>> Hi I'm writing a simple polynomial module which requires addition of
>> polynomials.
>>
>> I have defined the addition by overloading the function + with an
>> additional method:
>> +(p1::Poly, p2::Poly) = ...# code for the addition
>>
>> I would like to use + now in a reduce call, imagine I have a list of
>> polynomials [p1, p2, p3],
>> calling reduce(+, [p1, p2, p3]) behaves as expected, giving me a
>> polynomial that's the sum of the 3
>>
>> however, I would also like to cover the edge cases where there's only a
>> single polynomial or no polynomial.
>> I would like the following behaviours, :
>>
>> # reducing with a single polynomial list gives just the polynomial back
>> reduce(+, [p1])
>> > p1
>>
>> # reducing with an empty list gives back the 0 polynomial
>> reduce(+, [])
>> > ZeroPoly
>>
>> How might I add such functionality?
>> For the empty list case, how might I annotate the type so Julia is aware
>> that [] means an empty list of polynomials rather than an empty list of Any?
>>
>