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

天下一プログラマーコンテスト

以下の文字列はUTF-8を文字エンコーディング形式とする16進数のバイト列である。 UTF-8でエンコーディングされた文字列として解析した場合、この文字列の【文字数】を答えなさい。 http://www.klab.jp/tenka1programer/bosyu.html この問題を、sed、tr、wcで…

関数のアドレスとポインタ

C言語編 第43章 関数ポインタ pという名前の関数ポインタに、myabs関数のアドレスを代入するには、 p = myabs; とするだけです。次に、関数ポインタから関数を呼び出す方法ですが、これには2通りの方法があります。 ans = (*p)(-100); /* myabs(-100); …

computed goto

Gaucheのソースではgotoって使われているんだろうかと思ってのぞいてみたら、vm.cにおもしろそうな箇所発見。 /* We take advantage of GCC's `computed goto' feature (see gcc.info, "Labels as Values"). */ #ifdef __GNUC__ #define SWITCH(val) goto *d…

疑似Continuationモナド

HaskellのContinuationモナドを雰囲気だけGaucheに移植してみる。 Contクラス まず、疑似Continuationモナドとして、Contクラスを作る。 Contクラスが持つrunContスロットは同名のgetter関数を持つ。 returnは全然ジェネリックファンクションになってないん…

フィールドラベル

runContは関数ではなくてフィールドラベルを選択関数として使ったものだった。 Continuation モナド newtype Cont r a = Cont { runCont :: ((a -> r) -> r) } -- r は計算全体の最終の型 http://www.sampou.org/haskell/a-a-monads/html/contmonad.html new…

継続渡しスタイル

rubyの場合は継続の受け渡しにブロック構文を使うといい感じに書けるんだな。 同じく階乗の例。 def fact(n) n==0 ? yield(1) : fact(n-1){|r|yield(n*r)} end fact(4){|r|puts r}

Continuation モナド

理解するのにすごく苦労したのでメモ。 まず、定義はこんな感じ。 instance Monad (Cont r) where return a = Cont $ \k -> k a -- i.e. return a = \k -> k a (Cont c) >>= f = Cont $ \k -> c (\a -> runCont (f a) k) -- i.e. c >>= f = \k -> c (\a -> f…

鬼車 for VisualWorks

鬼車 for VisualWorks Ver.003 正規表現ライブラリ鬼車をCincom Smalltalk VisualWorks から使用するためのラッパーライブラリ。 http://d.hatena.ne.jp/kaminami/20090506/p1 これほしかった。 COMDispatchDriver経由のVBScript.RegExp利用だとwindows限定…

SheevaPlug

電源アダプタ型Linuxサーバ「SheevaPlug」 写真はちょっと大きめの電源アダプタという見た目ですが、その実はMarvell社のれっきとしたLinuxサーバ「SheevaPlug」。コンセントに直接挿しておける小型・省電力サーバで、デスクトップ型ホームサーバを置き換え…

2-NOTs problem

問題 A,B,Cの3入力, A',B',C'の3出力を持つブラックボックスがある. 入出力の関係は A'=not A B'=not B C'=not C である. ブラックボックスには, andとorは好きなだけ使われているが, notは2つしかないことが分かっている. 内部はどうなっているか. http://p…

トランポリン

gotoが使えない言語での末尾呼出し最適化はどうするのかと思っていたらこれを発見。 ベース言語が末尾呼出し最適化を保証してくれない場合によく使う手としてトランポリンがあります。 各関数を、結果を返すのではなく、その関数の継続手続きを返すように書…

JScriptでInputBox

wsh

ScriptControlを使うとできる。 var sc = new ActiveXObject("ScriptControl"); sc.Language = "VBScript"; sc.AddCode("Function f(x,y,z)\nf=InputBox(x,y,z)\nEnd Function"); WScript.Echo(sc.Run("f", "メッセージ", "タイトル", "初期値"));関数fを定…

空白の有無に応じた優先順位

中置演算子を書いたときに込めた気持ちをくむように、 つめて書いた場合は優先順位が高くなり、 空白を挟んで書いた場合は優先順位が低くなると便利そう f x + y → (f x) + yと解釈 f x+y → f (x + y)と解釈すでに考えてる人がいた。が、評判よくないのか…。…

無名関数での複数パターンマッチ

できる言語 MLでは以下のように、無名関数の定義時に|で区切って複数のケースのパターンマッチが書ける http://www.geocities.jp/m_hiroi/func/smlnj05.html fn pat1 => expr1 | pat2 => expr2 | ... | patN => exprNOCamlでは以下のように書ける http://www…