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

Erlangと状態

Erlangにおけるアンチパターン(なのかどうか悩んでいるもの)についていくつかねたがあるので、今回はその1つ「状態を持つ機能の実現方法」について紹介します。Erlangでは変数を書換えることはできないため、ある変数を加工する場合には新しい変数を用意する…

ErlangとInverse Fizzbuzz

Inverse FizzbuzzをErlangでやってみることにします。Inverse Fizzbuzzとは、fizz/buzz/fizzbuzz の組み合わせを与えたとき、それを満たすような最短の数列を得るというものです(途中のfizz/buzz/fizzbuzzのいずれでもない項は省く)。たとえば、[fizz] であ…

Erlang/OTP R15Bで例外発生時の行番号を知る

R15B が昨年12月に出ました。NewsのHighlightsを見ると、「Line number and filename information are now included in exception backtraces.」という一文が。どれどれ... -module(test). -compile(export_all). test_fail() -> A = 1, B = 2, A = B. test(…

Erlangとハフマン符号 (3)

今回は前回の続きと、encodeを並列化する話です。(前回のあらすじ)decodeを早くしようと、もともと1ビットずつのパターンマッチをしていた部分を、複数ビットを一度にマッチして1バイト分復号できるような無名関数を作って試してみたらオリジナルよりずっと…

Erlangとハフマン符号 (2)

前回の続きです。decodeを改良しようとして失敗した記録です。特に使うあてがあるわけではありませんが、もうちょっと高速化するあてはないもんかと思いました。なんとなく1ビットずつマッチさせてるのが非効率な感じがしました。ビット列→1バイトの変換表は…

Erlangとlists:zf/2

普段はEmacs + Distelで開発しているのですが、ErlIDEって最近どうなんだろうと思って久しぶりに触ってみました。 初回はかなり待たされましたが、その後は快適です。補完も効くし、F3(Open Declaration)もきちんと効いて快適です。UTF-8での保存もサポート…

Erlangとハフマン符号

他の言語で書いたことがあるコードをErlangで書くとどうなるかいろいろ試してみたくなりました。第1弾はハフマン符号です。ハフマン符号化の大まかな流れは、(1) 頻度表を作る、(2) 頻度表を元にハフマン木を作る、(3) ハフマン木を元に入力記号→ビット列の…

Erlangとボウリングの点数 (2)

前回の続きです。前回、倒したピンの数をリストにして渡すとスコアが返ってくる関数を作りました。今回は以下のような点をいじってみたいと思います。 途中経過が見えないのは寂しいので、各フレーム時点の合計得点が見たい 10フレームすべての情報を与えな…

Erlangとボウリングの点数とリストのパターンマッチ

Re: 配列の隣接する2項にそれぞれ演算を施した配列で、overlappingPairsCollect: というSmalltalkのメソッドが紹介されていました。面白そうなのでErlangで実装してみました。 -module(pairs). -compile(export_all). overlapping_pairs_collect(F, L) -> ov…