...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

遅延評価

What's New for D 0.165
Aug 20, 2006
New/Changed Features

  • Added implicit conversion of expressions to delegates.

「すべての言語は Lisp に通ず」ってか?

D言語がどんどん関数型言語っぽくなっていきますな.
でも遅延評価のことはまだよくわかってない.
今回の更新の周辺をまとめるとこんな感じ?

import std.cstream;

void dotimes(int n, void delegate() exp)
{
for (int i = 0; i < n; ++i)
{
exp();
}
}

void main()
{
// dmd 0.164 以前

// 無名delegate
dotimes( 3, delegate void() { dout.writef("Hoge "); } );
dout.writefln();

// 無名delegate+返値型の自動推論
dotimes( 3, delegate() { dout.writef("Fuga "); } );
dout.writefln();

// lambda delegatedelegateキーワード省略+無名delegate+返値型の自動推論)
dotimes( 3, { dout.writef("Foo "); } );
dout.writefln();

// dmd 0.165 以降

// 遅延評価(式からdelegateへの暗黙変換+lambda delegate
dotimes( 3, dout.writef("Bar "));
dout.writefln();
}

// 出力
// --
// Hoge Hoge Hoge
// Fuga Fuga Fuga
// Foo Foo Foo
// Bar Bar Bar

やっていることは全部同じで書き方が違うだけ.