22 lines
584 B
JavaScript
22 lines
584 B
JavaScript
(() => {
|
|
'use strict';
|
|
|
|
// dotProduct :: [Int] -> [Int] -> Int
|
|
const dotProduct = (xs, ys) => {
|
|
const sum = xs => xs ? xs.reduce((a, b) => a + b, 0) : undefined;
|
|
|
|
return xs.length === ys.length ? (
|
|
sum(zipWith((a, b) => a * b, xs, ys))
|
|
) : undefined;
|
|
}
|
|
|
|
// zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
|
|
const zipWith = (f, xs, ys) => {
|
|
const ny = ys.length;
|
|
return (xs.length <= ny ? xs : xs.slice(0, ny))
|
|
.map((x, i) => f(x, ys[i]));
|
|
}
|
|
|
|
return dotProduct([1, 3, -5], [4, -2, -1]);
|
|
})();
|