あどけない話

Internet technologies

2009-01-01から1年間の記事一覧

IO がファーストクラスだと何が嬉しいのか?

Haskell の IO は、ファーストクラス(第一級の値)だと解説されることがあります。その何が嬉しいのか、僕には長い間分かりませんでしたが、少し分かって来たので書いてみます。IO がファーストクラスである証拠として、IO を返す関数がリストに格納される例…

DMD

D

プログラミング言語Dのホームページを久しぶりに読んでみると、Mac 用のDMDがリリースされていて、びっくりしました。早速、インストールしてみましたが、インストール方に書かれている内容があまりにも適当なので、僕がやった作業を書き記しておきます。 設…

Piki v0.2 のリリース

昨日の日曜日は、奥さんが仕事だったので、家で子供の面倒をみていましたが、4時間ほど寝てくれたので、Piki をハックしてみました。 div ({}) を入れ子にできないバグを直した エラーになったときに、何行目で起こったか分かるようにした Parsec をよく知ら…

Mac と Windows 間で USB メモリーを使う

30G ぐらいのデータを知り合いに渡すことになりました。その人は、Windows ユーザーで僕は Mac ユーザーです。最近では 32G の USB メモリーが販売されているので、メディアは USB メモリーがよいという結論に至りました。2G 以上の USB メモリーは、何でフ…

Receiver Policy Framework

メールアドレスの詐称を判断できるようするドメイン認証には、いくつか種類があり、それぞれに長所短所があります。たとえば、こんな感じです。 SPF は、転送に弱いが、メーリングリストに強い DKIM は、転送に強いが、メーリングリストに弱い DKIM よりも S…

チョウゲンボウとホシムクドリから賢人鳥を導出する

すべての鳥は、チョウゲンボウ(K)とホシムクドリ(S)から導き出される。そこで、賢人鳥(Y)を K と S から導出してみる。 チョウゲンボウ(K) K の定義は以下の通り。 Kxy = x ホシムクドリ(S) S の定義は以下の通り。 Sxyz = xz(yz) 自己鳥(I) I の定義は以下…

Piki のリリース

僕は HTML ファイルを作成するために、お手製の WIKI を使っています。名前を Piki といいます。Piki は、他の WIKI とは違い、Web サーバを利用しません。単なるコマンドライン・プログラムです。たいしたものではないので、公開する気はなかったのですが、…

guard の動作原理を考える

「リストモナドの動作原理を考える」の続きで、guard の動作原理を考えてみます。guard は、リスト内包表記では、こんな感じに書けます。 [x | x <- [1,2], x < 2] → [1] これを do で書き直すと、こうなります。 do x <- [1,2] guard (x < 2) return x guar…

Firemacs 3.5

Firemacs を Firefox 3.1 でも動くようにして欲しいという要望があったので、CVS に書きためていたコードをリリースしました。こんな感じです。 C-xC-s で、選択した文字列を web 検索 C-M-t でタイトルをコピー C-M-u で URL をコピー Edit エリア only の…

リストモナドの動作原理を考える

Haskell のリスト内包表記はとっても便利です。あまり意味がないのですが、よく出される例は、こんな感じです。 [(x,y)|x<-[1,2],y<-[3,4,5]] → [(1,3),(1,4),(1,5),(2,3),(2,4),(2,5)] このように、このリスト内包表記は、あたかも二重のループであるかのよ…

正規表現を超える

まずは、Audrey さんが言った Haskell の殺し文句を思い出して頂きたい。 正規表現ベースのパーサはメンテナンスしにくいのに気づいた? Parsec を使って 15分で Perl6 の完全なパーサを書く方法を勉強しましょう。 15分というのは誇張が入っていると思うが…

シカクいアタマをマルクする

日能研の中刷り広告に中学入試の問題が載っていて、興味を引かれました。要約するとこうです。 6桁の数字がある。それぞれの桁の数字は異なる。 これを abcdef と表す。 この数字に 3 を掛けると bcdefa となる。 この数字に7を掛けると6桁の数字になる。 こ…

No exchange

もう2ヶ月ぐらい前になりますが、スーパーで買い物をしていたときのことです。レジで支払いを済ませた直後に、後ろに並んでいた外国人の方がレジの人に「この英語間違っていますよ」と言いました。レジの人は意味が分からないようで、笑ってその場をやり過ご…

高速な累乗計算

累乗(x^n)を単純に計算すると、オーダーは O(n)となり効率が悪いです。そこで、nを2の累乗に分解して計算する高速化手法が一般に知られています。たとえば、3 の 11 乗を計算する場合を考えましょう。11 は 1 + 2 + 8 に分解できます。この累乗の系列では、…

「グローバル変数が欲しい理由?」の考察

cut-sea さんが、グローバル変数が欲しい理由?を書いて下さっています。大作をありがとうございます。(_ _) 2回読ませて頂きました。cut-sea さんが、コマンドライン引数をグローバル変数にする必要がないと思うのは、まず以下のように考えるからですよね。…

Haskell のデータ構築子

Haskell の代数データ型で使われるデータ構築子は、実は関数と同様に扱えます。たとえば、四則演算の式を表す代数データ型を以下のように定義したとします。 data Expr = C Int | Add Expr Expr | Sub Expr Expr | Mul Expr Expr | Div Expr Expr deriving S…

Cocoa Emacsでのフォント設定

Cocoa Emacs をそのまま使うと、等幅フォントの設定が使い物になりません。日本語文字の幅は、英語文字の倍であるべきです!Web を調べても、みんな困っていることが分かっただけ。そこで自分でハックしてみましたが、到底手に負えないことが分かりました。(…

今日の Cocoa Emacs

長い間、自分でコンパイルした Cocoa Emacsが起動しても一瞬で落ちるようになっていました。ずいぶんと悩んだのですが、他の人は動いているみたいなので、自分の環境のせいだと思い、dtrace で追いかけてみました。こんな感じです。 % sudo dtrace -n "sysca…

Haskell でグローバル変数が欲しい理由

nobsun さんよりグローバル変数というトラックバックを頂いたので、お答えします。 直前にあるコード例では、「処理結果(cflag など)を下位の関数にずっと渡していかないといけない」部分が省略されているようでよくわからない。 たとえば、UNIX の od コマ…

HaskellとgetOpt

最近では、何かプログラムを書くときは、Haskell を使うようにしています。Haskell でスクリプトを書くと困ることの一つに、コマンドライン・オプションの処理があります。 IOモナド地獄 System モジュールで定義されている getArgs は IO [String] を返しま…