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

ボクがObj.magicを使うシチュエーション

要約 とりあえずコンパイルを通したいときは、Obj.magicを使うと便利だよ でも、Obj.magicを使ったコードを公開したり、レポジトリにコミットしたらダメだよ Obj.magicがないと困るとき シグネチャ付きのモジュールを書くとき、先にシグネチャを書いたりしま…

0x10と010をパースしてみよう

30分プログラム、その714。0x10と010のパースをやってみました。 Scalaは気軽にパーサ・コンビネータが使えるからいいよね。これを正規表現でやってたら、死んでた気がする。 使い方 scala> Number.parse("0x10") res0: Int = 16 scala> Number.parse("010")…

tig.rbで公式RTが使えるようになりました。

要約 tig.rbの最新版で、公式RTが使えるようになったから、みんなもRTしまくればいいと思うよ。 tig.rbってなに? tig.rbはid:cho45さんの作っているTwitter IRC Gatewayです。 irssiなどのCUIで動くIRCクライアンと組み合せると、CUIだけでTwitterを使えるの…

年齢の計算

30分プログラム、その713。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_246にインスパイアされて、年齢を計算する簡単な式を実装してみます。 Schemeは暗黙に文字列を数値に変換してくれないので、awkやPHPほど簡単な式ではありません。 使い方…

今日の日付をクリスマス イブイブ...の形式で表示する

30分プログラム、その712。今日の日付をクリスマス イブイブ...の形式で表示してみます。世間には、23日のことをクリスマス・イブ・イブと呼ぶ風習があるそうです。もっとすごいのになると、クリスマス・イブ・イブ・イブ・イブとかもあるそうです。 世間の…

OCaml経験値

30分プログラム、その711。TwitterでOCaml経験値なるもので盛り上っていました。 Ken Wakita@kwakita ML 経験値 = セミコロン数/ファイルサイズ RT @camlspotter: 何となく ML に移行してきた人が書いた ref を山程使ったコードとか、見る機会があると、心配…

Bitmapを書き出してみよう

30分プログラム、その711。Bitmapを読んでみよう - みずぴー日記に書き出し機能をつけてみました。 これで、画像処理で遊べるぜ。 readがBinary -> Bitmapなので、writeはBitmap -> Binaryにしたほうが美しいけれども、オフセットの調節などが難しかったので…

Data.Graphを試そう

30分プログラム、その710。Haskellでグラフを扱いたかったので、Data.Graphを試してみました。mkGraphの返すグラフの型が、具体的な型ではなく、grになっています。 *Main> :t mkGraph mkGraph :: (Graph gr) => [LNode a] -> [LEdge b] -> gr a b これはこ…

gitのアトリビュート設定をするとTeXのdiffが見やすくなるよ

git diffをすると、前回コミットしたときからのdiffを出してくれます。で、各差分(ハンク)ごとに、変更範囲も教えてくれます。でも、正直なところ、n行目周辺が変更されたと言われてもよく分かりませんよね。そこで、.gitattributesに *.tex diff=texと書い…

n文字の文字列を全部出力するコマンド

30分プログラム、その709。n文字の文字列を全部出力するコマンドを作ってみました。ふと、2文字のTwitterIDが空いていないか調べてみたくなりました。で、そのための準備として、aa、ab、...、zzという文字列を生成するコマンドを作りました。あとは、これを…

油売り算(1)

30分プログラム、その708。昔の日記をあさっていたら、http://karetta.jp/article/blog/ll-spirit/033840が解けてなかったので、再チェレンジ!が、前回挫折しただけあって、なかなか難しい。とりあえず、後で必要になるだろう型を定義しました。続きはまた今…

yesコマンド

30分プログラム、その707。yesコマンドを作ってみた。 yesコマンドというのは、延々とyesを出力し続けるコマンドです。一般的なUnixシステムならインストールされているはずなので、ターミナルでyesと打てば使えるはずです。 非常に簡単に作れちゃうんですが…

数字当てゲーム

30分プログラム、その706。ヒット&ブローという数字当てゲームを作ってみました。 元々は二人用のゲームで 互いに4桁の数字を決める お互いに4桁数字を言い合う 場所と数字が一致すればヒット、数字だけがならボールと答える というルールです。最初、ゲーム…

「Haskellで副作用のあるプログラムを作れることをどうやって説明したらいいの?」まとめ

発端 mzp「Haskellって副作用ないのにどうやってゲームとか作るの?」って質問にうまく答えれない。IOモナドのおかげで、副作用がなくても副作用があるプログラムが作れるんです、って言っても意味が分かんないよねlinkとTwitterでつぶやいたら、いろんな人か…

vectorを使ったスタック

30分プログラム、その706。Gaucheのvectorの使い方を調べるついでに、スタックを書いてみました。 gacuhe.arrayよりも使いやすいね。 使い方 (define s (make-stack 10)) (stack-push s 1) (stack-push s 2) (stack-push s 3) s (stack-top s) ;; => 3 (stac…

修論のためのLaTeX設定

そろそろ修論を書こうかと思ったら、いつのまにかLaTeXやEmacsの設定をしてました。こういう日もあっていいよね。 要約 hyperrefパッケージを使うと、目次をクリックできるようになるよ colorパッケージを使うと修正点を分かりやすくできるよ anything.el + …

Pythonでsl

30分プログラム、その705。前にcursesみたいにターミナルの任意の位置にテキストを出す関数 - みずぴー日記でcursesを使わずに端末の好きな位置に文字を出せるようになったので、slを作ってみました。 Perlで使っていた\eがPythonでは使えなかったので、hi_s…

MacPortsでdeactiveなportを削除するスクリプト

追記: port uninstall inactiveでできます。 追記2: port uninstall -uでもできます。30分プログラム、その704。MacPortsでdeactiveなportを削除するスクリプト。 MacPortsを長い間使っていると、古いportがたまってきます。 # (active)以外が古いport $ por…

Coqを落すコード

coq

Coqを使っていたら、coqcを落すコードに出会ってしまいました。 コード Require Import Sets.Ensembles. Variable (P: Prop). Variable (A: Type). Hypothesis the_hypo : forall x, exists xs, In A xs x -> P. Theorem some_theorem : P -> P. Proof. intr…

cursesみたいにターミナルの任意の位置にテキストを出す関数

30分プログラム、その703。cursesのmvaddstrみたいにターミナルの任意の位置にテキストを出す関数を作ってみた。 エスケープシケンスを使えば、好きな位置に文字を出すぐらいなら簡単にできるということを知りました。今まで、cursesが必須だと思ってたのに!…

Bitmapを読んでみよう

30分プログラム、その702。Bitmapを読んでみよう。 Erlangにはバイナリ構文なる便利なやつがあるので、それを使ってビットマップの読み込みをできるようにしてみよう。Erlangで画像処理、とかもおもしろそうだし。とりあえず、今回は読み込みのみ。そのうち…

n+kパターンを試そう

30分プログラム、その701。プログラミングHaskellを読んでたら、Haskellにはn+kパターンってのがあるらしい。 これを使うと even (n+1) = odd n みたいにパターンの部分にn+kの形が使えるらしいです。曰く、不人気で将来のバージョンでは消えるかもしれない…

Scalaでhexdump

30分プログラム、その700。Scalaでhexdumpを作ってみました。hexdumpは、与えられたファイルを16進数で表示するプログラムです。 $ hexdump a.txt 0000000 61 0a 62 0a 0a 0a 0a 0000007いわゆるバイナリエディタでみれるやつです。何かと便利ですよ、これ。…

Coqでラムダ計算を証明してみた

Coq

前からずっと取り組んでいた「Coqで単純型付きラムダ計算を証明してみよう」が一段落しました。 動機 let多相の実装はしたから、次は証明だろ 最近、流行っているCoqを覚えたい 扱えるラムダ式 型は、Bool型と関数型のみ。 Inductive type : Set := | BoolT …

いつ、どこで、誰が、何をしたジェネレータ

30分プログラム、その699。いつ、どこで、誰が、何をしたジェネレータ。 ランダムに文章を生成するよ! Printfがとっても欲しいよ! 使い方 昨日、海でキミが寝たval it = () : unit - println (make ()); 昨日、地の中で知らない人が食事をした val it = () :…

ハッシュテーブルを作ってみた。

30分プログラム、その698。データ構造を作ってみたシリーズ、ハッシュテーブルを作ってみた。 「ハッシュテーブルをハッシュと略すのは、ウィキペディアをウィキと略すのと同じだ」で同じみのハッシュテーブルです。「組込みのhashなんていらないぜ。自分で…

プログラムが140文字以内かをチェックするプログラム

30分プログラム、その697。プログラムが140文字以内かをチェックするプログラム。 最近、140文字以内でプログラムを書くのがはやっているらしいです。とりあえず、140文字以内かどうかをチェックするプログラムを書いてみましょう。 使い方 $ perl byte-chec…

一番長いコマンド名

30分プログラム、その697。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_239からの逆輸入です。 一番、長いコマンド名を探してみましょう。 使い方 $ python longest-command.py powerpc-apple-darwin9.7.0-gfortran-mp-4.3あー、アーキテクチャ…

ところで

下の記事で print max(append_map(os.listdir, os.environ['PATH'].split(':')), key=len) というコードを書いてるけど、これ結構読みにくくない? splitの部分はオブジェクトのメソッドなので処理が左から右に流れるけど、それ以外は関数なので処理が右から…

ビンゴゲーム・ジェネレータ

30分プログラム、その696。ビンゴゲーム・ジェネレータ。とはいっても、実際にシートを作るわけではく、ターミナルにテキストを吐き出すだけです。 9 34 72 74 10 93 16 36 95 61 3 12 * 32 34 64 77 64 57 2 51 24 42 92 0要するに 5x5のマス目に数字を並べ…