2006-06-01から1ヶ月間の記事一覧

bind1st

上のコードはC++のSTLで言う所のbind1stという奴らしい。そんなのあったっけ、というか多分初耳。 STL触ってなさすぎるけど、まあいいかめんどくさいしテンプレートは何か鬱陶しいし…

振り返る

コードばかり載せていて日記らしくないなあと思った。まあいいか。

一応

コードと実行結果を。 import std.c.stdio; class Curry(T, X, Y){ this(int x0, T delegate(X x, Y y) f0){ x = x0; f = f0; } T opCall(Y y){ return f(x, y); } private: X x; T delegate(X x, Y y) f; } void main(){ int hoge(int x, int y){ return x …

class Curry(T, X, Y){ .. }

折角だからtemplate使って使いやすくしてみた…のはいいものの。 int hoge(int x, int y){ return x + y; } Curry!(int, int, int) f = new Curry!(int, int, int)(3, &hoge); f(4);こう書かないといけない。ちょっとあんまりだ。 どうしたものか…

curry化再び

結局の所、スタック変数を自前で覚えておけばいいのだ。簡単なことだった。 import std.c.stdio; class Curry{ this(int x0, int delegate(int x, int y) f0){ x = x0; f = f0; } int opCall(int y){ return f(x, y); } private: int x; int delegate(int x,…

酷い

スタック変数は、 宣言されている関数が終了すると無効になります。 スタック変数へのポインタが、関数終了後には無効になるのと同様です がっかりだ・・・!

こんなことばっかりしてないで

何かまともなことをしようと思った。 でも丸一日以上軽く寝てないのでいい加減寝ます。

Curry

ちなみになんでこんな物触っているのかというとなんとなく関数のcurry化、まあつまりクロージャしたいなあと思ったからです。 何か上のが (動作が謎い|文法微妙) で気に食わないので適当にでっちあげてみた。 import std.c.stdio; class Curry{ this(int x0)…

動的クロージャ

よくわからない挙動を…うーん。 import std.c.stdio; int delegate() dg; void f(int x){ int foo() { return x; } dg = &foo; } void curry(int y){ int x = dg(); printf("x + y = %d\n", x + y); } void main(){ f(1); curry(2); }出力 x + y = 4おいまて…

nihaaaaaaaaaaaaaaaaa

なんとなく。

スライス

b = a[1..3]; // a[1..3] は、a[1] と a[2] からなる2要素配列 a[1] と a[2] と a[3] からなる3要素配列、じゃないのか…

おやおや…

K.INABAさんとこの「動的配列のサイズ設定」のコードのコメントがおかしいような。 char a = new char[20]; char b = a[0..10]; char c = a[10..20]; b.length = 15; // aからのスライスで、15文字分の領域はあるので、常にin-placeでリサイズされる。 b[11]…

動的配列

Dの動的配列は、スクリプト言語のそれよりは動的じゃない。 int[] hoge = new int[5]; hoge[0] = 5; hoge.length = 11; hoge[10] = 6; printf("%d %d %d\n", hoge[0], hoge[10], hoge[4]); // => 5 6 0 hoge.length = 0; hoge = new int[11]; printf("%d %d …

SDL フォントの描画

SDL_FreeTypeが良さそうだけれど悪戦苦闘、一歩も進めず。導入できない… なんていうかSDLはひたすらドキュメントが少ない上に英語難しい。 SDL_ttfとか、SDL_kanjiとか、選択肢は他にまだあるんだけれどなあ。どうしようかな。 というかDの日記になってない。