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);
}