> > # 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? >> >