イヌツムリのメモ

学習したことのメモである。しかし、他の人が読んでもわかるように書こう。

Rustでmap関数を実装したかった

結論

納得いかん
引数の方を何でもにできなかった。
再帰関数を定義しようとすると、多重貸し出しになってコンパイルが通らなかった。
解決策を調査したい。

サンプルコード

fn map<T>(f: Box<dyn Fn(T) -> T>, a: &Vec<T>) -> Vec<T>
where T: Copy + std::ops::Add<Output = T> + std::ops::Sub<Output = T> + std::ops::Mul<Output = T> + std::ops::Div<Output = T>
{
        let mut b = vec![];
        for &num in a{
            b.push(f(num));
        }
        b
   
}

fn triple<T>(x: T) -> T
where T: Copy + std::ops::Add<Output = T> + std::ops::Sub<Output = T> + std::ops::Mul<Output = T> + std::ops::Div<Output = T>
{
    x * x + x - x / x 
}
fn main(){
    let mut arry1 = &vec![4, 5, 3, 2];
    let v1 = map(Box::new(triple),&mut arry1);
    println!("{:?}", v1);
}