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コンパイラインストールした。 遊び放題… ずいぶん間が空いたなあ。今日は元気になったので何かしよう。

template in template

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…

Enumerable

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. 要は…

New function template syntax.

6月12日の日記で、 関数テンプレートの省略記法ないのが気に食わないけどすっきりしている!気にいりました! と書いてたんですが。 気に入りました! 他にもあるようだけれど英語力がないので理解できません!今日は早く家に帰れるので帰ったら調べよう。

map

それは 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…

Manager

昨日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…

thisでthis

例えば犬オブジェクトをたくさん作るとして、それを犬マネージャクラスで管理したとする。 犬オブジェクトを色んなところでいっぱい作るんだけど、全部一度に操作したいことがあるかもしれない。皆鳴け、みたいな。 それをしようとすると、犬クラスのコンス…

悔しかったので

色々考えてみた。 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分とかとっとと病院行け、と思いました。

curry化三度

関数テンプレートと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と、関数テンプレートの型推論。