There's also std::iter::AdditiveIterator.
fn average<T: Num + NumCast + Clone>(values: &[T]) -> T {
let sum = values.iter().map(|n| n.clone()).sum();
sum / num::cast(values.len())
}
On Tue, Sep 24, 2013 at 7:36 PM, Brendan Zabarauskas <[email protected]>wrote:
> I normally prefer using `std::num::{cast, zero}` as its a tad more
> readable. So:
>
> use std::num;
>
> fn average<T:Int>(values: &[T]) -> T {
> values.iter()
> .fold(num::zero::<T>(), |x, y| x.add(y))
> .div(&num::cast(values.len()))
> }
>
> fn main() {
> print!("{}", average([1,2,3]))
> }
>
> On 25/09/2013, at 8:09 AM, Scott Lawrence <[email protected]> wrote:
>
> > Use NumCast::from(count).
> >
> > You'll also want to be sure to initialize sum. I'd use the Zero instance.
> >
> > use std::num::Zero;
> > fn average<T:Int>(values:&[T]) -> T {
> > let count = values.len();
> > let mut sum:T = Zero::zero();
> > for v in values.iter() {
> > sum = sum.add(v);
> > }
> > return sum / NumCast::from(count);
> > }
> > fn main() {
> > println(fmt!("%d", average([1,2,3])))
> > }
> >
> > On Wed, 25 Sep 2013, Andreas Zwinkau wrote:
> >
> >> I tried to write an average function, but so far failed to convince
> >> the type checker.
> >>
> >> fn average<T:Int>(values:&[T]) -> T {
> >> let count = values.len();
> >> let mut sum:T;
> >> for v in values.iter() {
> >> sum = sum.add(v);
> >> }
> >> return sum / count;
> >> }
> >>
> >> error: mismatched types: expected `T` but found `uint` (expected type
> >> parameter but found uint)
> >>
> >> The problem is that sum is the generic type T, but count is uint due
> >> to the definition of the len function. Casting "count as T" should
> >> work, i thought, but rustc seems to have another opinion?
> >>
> >>
> >> --
> >> Andreas Zwinkau
> >>
> >> work email: [email protected]
> >> private email: [email protected]
> >> homepage: http://beza1e1.tuxen.de
> >> _______________________________________________
> >> Rust-dev mailing list
> >> [email protected]
> >> https://mail.mozilla.org/listinfo/rust-dev
> >>
> >
> > --
> > Scott Lawrence
> > _______________________________________________
> > Rust-dev mailing list
> > [email protected]
> > https://mail.mozilla.org/listinfo/rust-dev
>
> _______________________________________________
> Rust-dev mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/rust-dev
>
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev