diff --git a/src/main.rs b/src/main.rs index e7a11a9..fee5c23 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,44 @@ -fn main() { - println!("Hello, world!"); +use std::iter::Sum; +use std::ops::Mul; + +type Point = [A; N]; + +type Parameters = [Point; M]; + +fn dot_points(x: &Point, y: &Point) -> A +where + A: Sum<::Output> + Copy, +{ + x.iter().zip(y).map(|(&x, &y)| x * y).sum() +} + +fn dot(x: &Point, y: &Parameters) -> Point +where + A: Mul + Sum<::Output> + Copy + Default, +{ + let mut result = [Default::default(); M]; + for (i, coord) in y.iter().map(|y| dot_points(x, y)).enumerate() { + result[i] = coord; + } + result +} + +fn line(x: &Point, theta: &Parameters) -> Point +where + A: Mul + Sum<::Output> + Copy + Default, +{ + dot(x, theta) +} + +//fn data_set() -> ([f64; 4], [f64; 4]) { +// ([2.0, 1.0, 4.0, 3.0], [1.8, 1.2, 4.2, 3.3]) +//} + +fn linear_params_2d(m: A, c: A) -> Parameters { + [[c, m]] +} + +fn main() { + let y = line(&[1.0, 7.3], &linear_params_2d(3.0, 1.0)); + println!("{:?}", y); }