fn subc(a: usize, b: usize) -> usize { if a >= b { a - b } else { 0 } } fn convolve(a: &[f32], b: &[f32]) -> Vec { use std::cmp::min; let N = a.len() - 1; (0..2*N+1).map(|k| //(subc(k, N) .. min(k+1, N+1)).map(|i| (k.saturating_sub() .. min(k+1, N+1)).map(|i| a[i]*b[k-i] ).sum() ).collect() } fn main() { let v1 = vec![1.0, 2.0, 3.0]; let v2 = vec![0.0, 1.0, 0.5]; let v3 = convolve(&v1, &v2); println!("{:?} * {:?} = {:?}", v1, v2, v3); }