2006-06-01から1ヶ月間の記事一覧
上のはあんまりだ…
授業さぼってしまって暇なので… import std.c.stdio; void main(){ int[char[]] h0; h0["sa"] = 1; h0["tsu"] = 2; h0["ga"] = 3; h0["i"] = 1; h0.write(); char[][int] h1; h1 = h0.invert(); h1.write(); h1.delete_if( (int i, char[] c){ return (i == …
すっかりその存在を忘れていた連想配列を触ってみた。 import std.c.stdio; void main(){ int[char[]] h; h["hoge"] = 3; h.write(); h.zero("hoge"); h.write(); h["huga"] = 5; h.write(); h.remove("hoge"); h.write(); h["hige"] = 6; h["foo"] = 1; h["…
優先度的にいうと、授業<D! 駄目すぎる。
そういえば触ってなかったな、と思ったので触ってみる。 import std.c.stdio; struct Hoge{ int x, y, z; } void main(){ Hoge hoge; with (hoge){ x = 5; y = 4; z = x; printf("%d %d %d\n", x, y, z); } Hoge* hige = new Hoge; with (*hige){ x = 5; y =…
学校のPCにdmdコンパイラインストールした。 遊び放題… ずいぶん間が空いたなあ。今日は元気になったので何かしよう。
Enumerableを書いているのですが、いきなりこけてます。 template.d(4): template template.main.mixin Foo!(); .hoge(T) cannot declare template at function scope higeつまりmixinのためのテンプレートFooの中で、関数テンプレートhogeを使ったために、…
評価したい要素を配列に突っ込んで、その後配列操作関数でどうにかしてください! ということになりました。わあい。 寧ろ、opIndexとlengthさえあれば!
mixinせずに普通に書くと、勿論動きます。 eachの引数をなくすと動きます。 ということで引数に関数ポインタを持つ関数をmixinするテンプレートの中から呼び出すとボカン、っぽいです。 テンプレートの引数に関数ポインタ渡してごにょごにょ、とか色々試した…
import std.c.stdio; template Hige(){ void hige(){ hoge(); } } class Hoge{ void hoge(){ printf("hoge\n"); } mixin Hige; } void main(){ Hoge h = new Hoge(); h.hige(); }これは通る。 hogeそしてこっちは駄目。 template Foo(){ int[] map(int deleg…
RubyのEnumerableをDで書こう、と思っていたんですが、なんとなくイヤになって書くのをやめてしまいました… そもそもeachは式の評価しかしてくれないので、まず始めに「int[] a; each( (int i) { a ~= i; } );」とかで各要素を配列にしてから「dg(a[i])」と…
typeof(T[0])[] map(T, U)(T ary, U dg){ typeof(ary[0])[] rary; rary.length = ary.length; foreach (int i, typeof(ary[0]) t; ary){ rary[i] = dg(t); } return rary; }これがコンパイル通るという… これでMyArray的なものでも使えるようになったけど、…
上のmapは、どう考えてもおかしい…Tが配列じゃない時に返値が違ってしまう。 どうせ配列しか省略記法使えないし、矢張り元に戻したほうが良さそう。
Added opIn_r operator overload. Function return types for lambda delegates can now be inferred. delegate keyword now optional for lambda delegates. Shadowing local variable declarations is now deprecated. New function template syntax. 要は…
6月12日の日記で、 関数テンプレートの省略記法ないのが気に食わないけどすっきりしている!気にいりました! と書いてたんですが。 気に入りました! 他にもあるようだけれど英語力がないので理解できません!今日は早く家に帰れるので帰ったら調べよう。
それは each じゃなくて map か collect でしょうといわれた。 全くその通りだと思った。 一番初めに思い出したメソッド名が each だったから… あと、配列だけでなくて配列の振る舞いをするインスタンスにも使えると良いですね、というつっこみをうけて、若…
そして無名関数でこんな風に使える。 a = a.each( (int a) { return a * a; } );λ!λ!
別になんてことはないけど一応。 この前書いたeachがこうなる。 T[] each(T, U)(T[] ary, U dg){ T[] rary; rary.length = ary.length; foreach (int i, T t; ary){ rary[i] = dg(t); } return rary; }気に入りました!
まさに遊びというべきコードを量産し続けている… まともに使えそうな物はinitとuniqだけという噂。
すっかり忘れていたプロフィールをつけた。 意味ないな。 いや意味あるか…よくわからない。
import std.c.stdio; void main(){ int[] a; a.length = 10; for (int i = 1; i < 10; i++){ a[i] = i; } int power_of_two(int i){ return i * i; } bool power_of_three(int i){ return ((i % 3) == 0); } int delegate(int) dg_a = &power_of_two; bool d…
昨日DogManager書いてから考えてちょっと書いたんですが。 例えばGameMgrがあって、そこからShotMgrとかEnemyMgrとか派生させて、全部GameMgrの配列に突っ込んでぶん回してやれば素敵… 素敵は素敵かもしれないけれどそうするとManagerをstaticにできない。こ…
でもボクは寝るよ。昼からパスタを食べに行くのでそれまでには起きないといけない。 明日は配列もうちょっと触る。
すると、こんな具合に書けるらしい。 import std.c.stdio; void main(){ int[10] a; for (int i = 1; i < 10; i++){ a[i] = i; } int t = a.total(); // ここ printf("%d\n", t); } int total(int[] array){ int t = 0; foreach (int x; array){ t += x; } r…
例えば犬オブジェクトをたくさん作るとして、それを犬マネージャクラスで管理したとする。 犬オブジェクトを色んなところでいっぱい作るんだけど、全部一度に操作したいことがあるかもしれない。皆鳴け、みたいな。 それをしようとすると、犬クラスのコンス…
色々考えてみた。 class Hoge{ static Hoge[] opCall(int size){ Hoge[] objs = new Hoge[size]; for (int i = 0; i < size; i++){ objs[i] = new Hoge(); } return objs; } } void main(){ Hoge* hoges = new Hoge[5]; hoges = Hoge(5); }これは…駄目だ。何…
今更なんですが、C++では Hoge* hoges = new Hoge[size];とでもすれば、ちゃんとアロケータもコンストラクタもsize回呼び出されるんですが。 Dだと、 Hoge[] hoges = new Hoge[size];としても、Hogeの動的配列hogesにHogeのsize分の領域が確保されるだけ… 詐…
インフルエンザなぞかかってしまいました。この時期にまさかインフルエンザとは、と思いつつも熱8度8分とかとっとと病院行け、と思いました。
関数テンプレートとauto宣言で型推論(推論じゃないけど)。 import std.c.stdio; class Curry(T, X, Y){ this(int x0, T delegate(X, Y) f0){ x = x0; f = f0; } T opCall(Y y){ return f(x, y); } private: X x; T delegate(X, Y) f; } template curry(T, …
RAIIじゃないautoと、関数テンプレートの型推論。