map
関数も欠かせませんね。というわけで:
ループで回すのはめんどくさいので、fold_right
で実装しました。
fold_left
ができたので次はfold_right
もできるよね、というわけで。
List
を作ったので次はfold_left
だよねー、というわけで書いてみた。しかし、型を合わせるのに結構手間取ってしまった…
Vec<T>
型を引数で受け渡して、それをList<T>
型に変換することで、とりあえずリストの生成を簡単にすることができた。しかし、ここでT : Copy
にしちゃったからList<List<>>
型はnew_list
関数では作れない気がしてきた。
とりあえず関数型プログラミングには必須だろうということで、List
を定義してみた。コンスセルのtail
部分にいちいちBox::new
つけなきゃならない(理由はわからなくもない)のがめんどいけどどうにかならないものか…。
Hello, World!やったので次はHello, Macro!ですね。というわけで、サンプルコードを真似して書いてみました。
macro_rules! hello { () => ( println!("Hello, Rust Programming Language"); ) } fn main() { hello!(); }
()
が空引数にマッチするパターンを表しているわけですね。わかります。コンパイル方法と出力結果は同じなので省略します。
Rustには高機能なマクロがあると知って、ちょっと勉強を始めてみることにしました。飽きたらそこで止めるかもしれませんがご了承ください。
まずは定番のHello, World!書いてみましょう。
fn main() { println!("Hello, {rust}", rust = "Rust Programming Language"); }
println関数(呼び出し方が特殊なのでマクロなのかも)に"Hello, {rust}"という文字列(変数を含む)を渡して、rust =で{rust}の部分を埋めています。
>rustc hello.rs
で、hello.exeが生成されるので、それをそのまま実行。
>hello.exe Hello, Rust Programming Language
第一回(?)はここまで。