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

プリプロセッサでループしましょう!

みなさんいかがお過ごしでしょうか?前回は足し算しました。今回はループです。 足し算ではとにかくいっぱいPP_ADD_Iを並べましたが、もっとスタイリッシュに書きたいですね。書きましょう。 まずC/C++のループはこんな感じです: while (condition) { ... }…

プリプロセッサで足し算しましょう!

プリプロセッサは所詮文字列置換、計算なんてできやしない…そう思っている方は多いでしょう。しかしそれは違います。計算できます。 本日の目的はプリプロセッサで足し算です。ADD(3, 2)と書けば5と答えてくれる関数マクロを作ってみましょう。 おっと、#def…

そろそろれいがいさんへの思いを適当にまとめる

関数が何であるかを決めないとエラーが何であるかを決められない エラーは例外以外でも表現できる エラーのときは関数終了してエラーを通知する エラーを例外で通知する場合は、とりあえず今知ってることを適切な型の値として投げる(多分適切な型ってのがア…

REIGAI REIGAIせよ!

昨日のカオスの続き。 例外は「エラーを取り扱う手段の一つ」として考案されたもので、それ以外を扱うのはマナー違反。よって例外を投げることはエラーであることを上位レイヤーに報告するものであるが、エラー自体は必ずしも例外ではない(ほかにも手段はあ…

れいがい!

例外むずい。むずいから考える。考えても全然文章にならないので言葉の断片を並べる。以下ではレイヤーとスコープはだいたい同義だと思う。 例外はいつ使うべきなのか? エラーであることの表現として使うとすると、あるレイヤーで、そのレイヤーから分かる…

有向グラフのあるノードからあるノードへの全てのパスを表現する

いつまでたってもまとまらないので落書き程度で適当に書く。 有向グラフから圏Cを作る 作り方は http://d.hatena.ne.jp/m-hiyama/20090525/1243210967 ここで、 length([a, f1, f2..., fn, b]) = n + 2 とする。 Cの射の集合を射とする圏C'を作る a, b, cをC…

nullを許容しないスマポ

C++

template<typename T> struct smart_ptr { ... explicit smart_ptr(T * ptr) : ptr_(ptr) {} template<typename U> smart_ptr(smart_ptr<U> const & other) : ptr_(other.get()) {} smart_ptr & operator=(T * ptr) { ptr_ = ptr; ... return *this; } template<typename U> smart_ptr & operator=(s</typename></u></typename></typename>…

はからずも一人暮らしがはじまることになったので何かアドバイスください

ください。

16進表記の3の倍数にマッチする正規表現

そのまま書くと分かりにくすぎるのでperlで。 $zero="[0369CFcf]"; $one="[147ADad]"; $two="[258BEbe]"; /^(?:$zero|$one(?:$zero|(?:$one$zero*$two))*(?:$two|$one$zero*$one)|$two(?:$zero|(?:$two$zero*$one))*(?:$one|$two$zero*$two))+$/要は16進表記…

まじめな話、新人研修とかプログラムの授業で C を取り扱うのなら、その前にBrainf*ckで色々教えたほうがいいと思うんだ

普通プログラムで最初に身に付けることは、コンピュータにいかにして仕事させるかっていうことだと思うけど、Cとか初めてプログラムに接触する人にとっては謎の呪文が多いし、そういう謎な部分は本題ではないのにやたらと気になって大変よろしくない。構造化…

「1+2=3 足し算に潜む迷宮」 読み終わった

1+2=3をネタにいろんなパラダイムを見てみる的な内容で、面白そうと思ってたあたりを小さく一巡りできて面白かった。 冒頭では予備知識なしでも読めるって書いてあったけど、割といったような…あと変換過程とかすごい省略しまくってる感じがする。こういう本…