56. Boost.Lambdaでのラムダ式
• 何故かできてしまう
int main()
{
using namespace boost::lambda;
auto f = _1; // ¥x -> x
cout<<f(1)<<endl; // -> 1
cout<<f(3.14)<<endl; // -> 3.14
}
• fの型は何なのか?
– forall a . a -> a をどうやって表現している?
63. カリー化の旨み
• 純粋関数的に状態を持ちまわるというのが
とてもやりやすくなる
cnt acc i = (acc, cnt (acc+i))
let a = cnt 0 in
let (v, b) = a 1 in –- v = 0
let (w, c) = b 2 in –- w = 1
let (x, d) = c 3 in –- x = 3
...
• オブジェクト vs 関数
• 関数プログラミングでは、次の状態として
関数を返すことがよくある(e.g. Iteratee)