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

ゴルフ紳士の会

昨日はゴルフ紳士の会でした。参加者はid:shiniciro_hさん、id:kurimuraさん、id:Ozyさん。 寝たら絶対遅刻すると思って徹夜したら超絶眠かったとか、かなりダメな感じでした。すみません… Ozyさんが急がしそうでした。申し訳ない…shinhさんは忙しいはずなの…

DMD 0.178

少し前に toDynamic と stod を書いたわけですが。 id:shinichiro_hさんに「にはさんのやったことが意味なくなったような」と言われました。 全く持ってそのとおりです! 追記:「auto strs = ["hoge", "hi", "ge"];」が通らないので絶望した!

プロパティ

プロパティ定義するテンプレートとか誰か書いてたっけ…ということでとりあえず的にgetterとsetterを書いてみました。 typeof(var) setter(alias var)(typeof(var) t){ return var = t; } typeof(var) getter(alias var)(){ return var; } class Hoge{ int x_…

値パラメタを取る関数テンプレートの型

引数がコンパイル時定数なら関数ポインタ、そうでないならデリゲートになります。 void hoge(int i)(){ writefln(i); } void main(){ int x = 0; writefln(typeid(typeof(&(hoge!(x))))); // void delegate() writefln(typeid(typeof(&(hoge!(4))))); // voi…

SICP

SICP を てにいれたぞ!

アキュムレータ・ジェネレータ

Dで書かれていないのが寂しいので、書いてみました。本当は寂しくもなんともなくてただ暇なだけです。 まずは、素直(?)に実装します。 int delegate(int) gene(int x){ return (int y){ return x += y; }; } void main(){ auto f = gene(1); writefln(f(2…

stod

stod = Staticarray TO Dynamicarray function template 前適当に書いて全然書けてなかったものです。 toDynamic!(T) stod(T)(T arg){ static if (is(typeof(T[0]))){ toDynamic!(T) ret; foreach (t; arg){ ret ~= stod(t); } return ret; } else { return …

toDynamic

ちょっと前のは寝ぼけてたんだと思います…まともなの書き直した。 template toDynamic(T){ static if (is(typeof(T[0]) U)){ alias toDynamic!(U)[] toDynamic; } else { alias T toDynamic; } } void main(){ writefln(typeid(toDynamic!(char[][]))); writ…

h

見覚えがあるなあと思ったら、去年もやってたそうです。なるほど。 とりあえず.NET Frameworkのインストールにてこずりました…ほげー。 で、とりあえず二問やってみたんですが、そんなに面白くなかったのでこれで終わりです!さよならHerbert君!

近況

何故かJavascriptのチュートリアルとかリファレンスとかソースコードとかを見ていました。 今現在、Python|CommonLisp|Javascriptを並列で学習中というよくわからない状態です。 明日中にこのリストからJavascriptが消える予定です。書く物書いたらそれでお…

やろうやろう あすやろう

http://www.kmonos.net/wlog/68.html#_2210061214 週末どう考えても時間ないのに面白そう過ぎて困ります。 やりたいなあああもおおおお。 パズルパズルしている、というよりは寧ろパズルでしかないのが素晴らしいです。 しかし、以前に似たようなものを見た…

配列リテラルと静的配列の初期化

配列リテラル追加されたけど全然使って無かったよなあ、とふと思ったので使ってみたんですが… まずこれが通らなくてがっかり。 auto ary = [[1, 2, 3], [4, 5, 6]]; // Error: cannot implicitly convert expression ([[1,2,3],[4,5,6]]) of type int[3][2] …

内包表記的な何か

早速作ってみました。 template comp(alias var){ U[] comp(T, U)(T ary, lazy U dg){ U[] ret; foreach (val; ary){ var = val; ret ~= dg; } return ret; } } void main(){ int x; int[] ary = [1, 2, 3, 4, 5]; foreach(v; comp!(x)(ary, x*x)){ writefln…

Pythonを始めよう

別にみんぱい買ったというわけでもないんですが、学校のPCにpython入ってるし暇なので今からpythonの入門を始めます。でも手元にあるのは「やさしいLisp入門」… とりあえず対話モードでHello, World! >>> print "Hello, World!" Hello, World!ほげほげ。次リ…

内包表記的な何か続き

一時変数を予め宣言しなくても良いcompが出来ました。_!(T)を使います… void* placeholder; T _(T)(){ return *(cast(T*)placeholder); } U[] comp(T, U)(T ary, lazy U dg){ U[] ret; foreach (val; ary){ placeholder = &val; ret ~= dg; } return ret; } …

toDynamic

テンプレート引数の型推論には若干柔軟さに欠けるところがあります。 例えば文字列リテラルを渡すと「char型の要素Nの静的配列」と推論してくれるわけですが、本当は動的配列だと推論して欲しい、ということがよくあります。 そういうときに静的な配列型から…

FunctionalFunction続きの続き

delegate問題をid:shinichiro_hさんがささっと解決してくれました。素晴らしいです。 とりあえず、ゴルフに毒されてるボク的には template Functional(alias func){ alias Functional_!(function ReturnType!(func) (ParameterTypeTuple!(func) a) { return …

ReturnTypeテンプレートのファンクタ対応

一瞬恥ずかしい日記があった気がしますが気のせいです。 std.traitsのReturnTypeテンプレートは、opCallを実装したファンクタには対応していません。適当に対応させてみます。 template MyReturnType(alias dg){ static if (is(typeof(dg) R == return)){ al…

DMD v0.177

Classinfo.nameが完全修飾名を返すようになりました。 これでクラステンプレートでクラス名しか得られなくてがっかり…という切なさを回避できます。やったね! ところがどっこい、完全修飾名なので、モジュール名も構文糖で省略されたはずのテンプレート名も…

FunctionalFunction続き

(今日はあまり分からないまま書いてるので全体的に意味不明です。) どうやらalias引数には、なんと関数リテラルが(!)(…)渡せてしまうようです。 Functional!((int x, int y){ return x + y; }) func;できるわけないと思ってたのでびっくりです。これ…

FunctionalFunction

勢い余って変な物を作ってしまいました。 (良く知りませんが)関数型言語では、関数の引数が足りなかった場合、勝手にカリー化してくれます。 それの何がいいの?は兎も角として、Dにもそういう関数があってもいいんじゃないかと思いました。 ということで…

複数のタプルを引数として受け取る

タプルは常に可変個引数の形式でしか受け取れないため、普通に書くと複数のテンプレートを受け取ることが出来ません。 まあ説明するのがめんどくさくなってきました。ラッパークラス書け!以上。 それじゃあんまりなので真面目に書きます。ごめんなさい。 し…

式タプルの代入

式タプルはそのままでは代入出来ません。 alias TypeTuple!(int, double) T; T t; void copy(T t_){ t = t_; // t is not an lvalue }変数の癖に生意気なんだよおおおてめえええええええという気分になります。 さてどうすればいいのかというと、foreachを使…

気づいてしまった

jpegはhogeのtypoだったんだよ!!!!!11 hoge -> hoeg -> jpeg この日記を見た人は、三日以内に世界の秘密を守っている謎の秘密結社に消されます。 消されたくなかったらこの事実をより多くの人に知らせてください。お願いします><

タプル引数の特殊化

知ってる人も多そうですが、タプル引数は特殊化できません。色々書き方変えてダメだったので恐らく無理です。 template hoge(T... : TypeTuple!(int, int)){ ... } // エラーこれはそれなりに問題で、std.traitsで取得した型タプルを元にテンプレート引数の…

std.traits

今日はstd.traitsの謎に迫ります! テンプレート引数に渡された関数がオーバーロードされてる時はどうなってるんでしょう、と言う話です。 結論から言うと始めに宣言されたものが返ってきます… int f(int x){ return x; } char[] f(char[] s){ return s; } c…

std.bind

が追加されたので下のはやる気なくなったとか。

クラステンプレートの特殊化

そういえば忘れていましたがクラステンプレートの特殊化もできません。traitsで何とかして下さい。おしまい。

関数オブジェクト

int func(int x, int y, int z){ return x + y - z; } void main(){ auto f = Functor!(func)(_2, _3, _1); f(1, 2, 3); // 3 + 1 - 2 = 2 auto f_ = f(4, _2, _1); f_(2, 1); // 2 + 4 - 1 = 5 auto f__ = f_(1); f__(3); // 1 + 4 - 3 = 2 auto f___ = f_(…