エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

2007-03-01から1ヶ月間の記事一覧

TabをSpaceに展開

tabToSpace tabSize s = tabToSpace' tabSize s where tabToSpace' _ "" = "" tabToSpace' 0 s = tabToSpace' tabSize s tabToSpace' i ('\t':cs) = (take i $ repeat ' ') ++ (tabToSpace' tabSize cs) tabToSpace' i (c:cs) = c:(tabToSpace' (i-1) cs)

Haskellでcatコマンド(例外処理付き)

import System cat :: [String] -> IO () cat [] = getContents >>= putStr -- 標準入力 cat [f] = catch (readFile f >>= putStr) -- 任意のファイル(例外捕捉付き) (\e -> putStr ("CANNOT OPEN " ++ f ++ "\n")) cat (f:fs) = cat [f] >> cat fs -- 複数…

オブジェクト指向へ跳躍

C++を使ってソフトウェアの開発をしているわけですが。「オブジェクト指向っぽくないな」という設計に出会います。 オブジェクト指向は普通の技術者が普通に使う普通の技術だと、今では思っているのですが、それとて学ばずにその技術が身に付くわけもなく、…

boost::lambdaにも弱点が

C++

struct Point { int x; int y; }; void test() { std::vector<Point> points; // 悲しいことに_1.xと書けない。 // ->*演算子が定義されているので、それを使ってこう書く必要が。 std::for_each(points.begin(), points.end(), std::cout <<constant("(") << &_1->*&Point::x << ", " << &</constant("(")></point>…

何でもコールバック

C++

boost::functionを使ってなんでもコールバックできる関数を作る。 void loop(int n, boost::function<void(int)> callback) { for(int i = 0; i < n; ++i) { callback(i); } } void foo(int n); class Bar { public: void operator () (int n); }; void test() { // 関</void(int)>…