2007-09-01から1ヶ月間の記事一覧

Perlの代替として(11)

ファイルの読み込み ファイルを読むのがやけに遅い。 例えば、こんな100万行のファイルを読む。 0 1 … 999998 999999 Perlでこうやって吐いて、リダイレクトする。 $n = 1e6; for(my $i = 0; $i printf "%d\n", $i; }これをふつうにDとPerlで読むと、 次のよ…

交通死亡事故(3)

面白くないので、曜日ごとの死亡者数でも。 日,847 月,869 火,886 水,905 木,906 金,1009 土,930 金曜日が多い。 やはり酔っ払いが多いのだろうか。 意外と平均的だが、金曜日が多いのは有意ではある。 2002年も調べてみた。 日,1165 月,1160 火,1176 水,115…

交通死亡事故(2)

前回、最も死亡者数の少なかった日は何人だったかを推定したが、 実際にはどうだったのだろうか。 ITARDAのサイトにそのデータがある。 例えば、http://www.itarda.or.jp/kouki/060101.html見て分かるように、 日付のファイルにその日の死亡者数が書かれてい…

交通死亡事故(1)

去年の交通事故死亡者の数は6352人だったという。 最も少なかった日は何人死亡しただろう。とりあえず、乱数で10万回(10万年)回してみた。 これでそんなに間違いはないだろう。 p0 = 0.00002 p1 = 0.00023 p2 = 0.00148 p3 = 0.00873 p4 = 0.03603 p5 = 0.…

Perlの代替として(10)

map Perl5以降にはmapというすばらしい関数がある。 次は、配列の各要素を2倍にする。 my @a = ( 1, 2, 3 ); my @b = map { $_ * 2 } @a;for(@b) { print $_, ","; } print "\n"; こんな関数はDにはないが、自作するのは簡単。 import std.cstream;void main…

Perlの代替として(9)

可変個引数 Perlではサブルーチンの引数は配列に変換されるので、 最初から可変個引数のようなものである。 print sum(1, 2, 3), "\n";sub sum { my $result; for(@_) { $result += $_; } return $result; }Dでも同じように書ける。 import std.cstream;void…

Perlの代替として(8)

テンプレート Perlは型付けがないので関係ないが、 D言語ではテンプレートが使える。 T max(T)(T a, T b) { return a > b ? a : b; }C++と比べるとずいぶん簡単な記述だ。 C++だとこうかな?(試していない) template T max(T a, T b) { return a > b ? a :…

Perlの代替として(7)

delegate Perlのように、 @a = sort { $a->[1] $b->[1] } @a;というように、関数を引数に使いたかったのだが、 なぜかDの配列のsortではそれができないのだった。 しかし、sort自作すればそれができる。 delegateは関数みたいなもので、 あまり面白くはない…

Perlの代替として(6)

sort(2) クラスのオブジェクトのソートは次のようにする。 import std.stream; import std.cstream; import std.string;void main(char[][] arg) { class cData { int rank, value; this(int a, int b) { rank = a; value = b; } int opCmp(Object o) { cD…

Perlの代替として(5)

sort(1) こんな感じでソートする。 import std.stream; import std.cstream; import std.string;void main(char[][] arg) { auto a = [ 3, 11, 2 ]; a.sort; dout.writefln(join(a)); // 2,3,11 }char [] join(int [] a, char [] sep = ",") { char [] str…

Perlの代替として(4)

連想配列 int[char [] ] totalTime;と宣言すると、keyが文字列の連想配列になる。 もちろん、普通に代入できる。 totalTime[str] = 5;keyがあるかを調べるには次のようにする。 if(str in totalTime) { ...列挙は次のようにする。 foreach(str; totalTime.ke…

Perlの代替として(3)

実用的なプログラムを作ってみる これくらいわかっていれば実用的なプログラムが作れるのではないか。 そう思って次のようなものを作ってみた。 プログラムを実行したときに、ある部分の実行時間を知りたいとする。 そこで、C/C++のコードのところどころに、…

Perlの代替として(2)

文字列 カンマ区切りのテキストを読んで、2カラム目を合計する。 while(<>) { split ','; $sum += $_[1]; } print $sum, "\n";これをD言語にすると、 import std.stream; import std.cstream; import std.string; import std.conv;void main(char[][] arg) {…