gen_tcp:controlling_process/2

Erlangを触る時間がなかなかとれずに心身に深刻なダメージが蓄積してきたので、久しぶりにいじることにしました。今まで何度書いてきたか分かりませんがポートフォワーディングを書いています。双方向からのデータを相手に転送することを考えると、{active, …

Erlangとジャンケン

SequenceableCollection >> #after: を使ってジャンケンの勝敗判定経由でPrologの話をしよう - CROSS2012・言語CROSSにあるジャンケン判定をErlangで真似てみました。 -module(janken). -compile(export_all). win(goo, choki) -> true; win(choki, par) -> …

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…

Erlangと配列 (つづき)

前回のつづきです。Erlangには配列がないものだと思い込んでいたのでこのようなエントリを書いたのですが、ふとReference Manualを見るとarrayという単語が...以前書いたCRC32のルーチンに追加して再度計測してみました。 Erlang R14B03 (erts-5.8.4) [sourc…

ErlangとCRC32 (つづき)

先日のErlangと配列の続きです。あらすじ: zlib:crc32と、自前で実装したCRC32の性能を比較しました。自前で実装したCRC32は内部のテーブルの持ちかたをいろいろ変えて性能の違いを計ってみました。当たり前ですがzlibのものが一番早かったです。今回はそん…

Erlangとiolist()

io:format/2みたいな書式指定の出力を、printfに対するsprintfのように、文字列を作るために使いたい! というときには io_lib:format/2が使えます。 16> io_lib:format("~s", ["ABCDE"]). ["ABCDE"] 17> io_lib:format("~10s", ["ABCDE"]). [[[32," ",32,32]…

Erlangと配列

(「ErlangとCRC32」から改題)CRC32が必要になりそうだったので、Erlangでどうやって実現させるかを考えてみました。zlib:crc32があることが分かりましたが、CRC32と一口に言っても利用する多項式によって様々なバリエーションがありますので、多項式を外から…

ErlangとQuine

Quineとは自分自身を出力するようなプログラムです。出力結果と、元のソースを比較するとぴったり一致します。賢い人にしか書けないと思っていたので、私には縁がないと思っていたのですが、Google Code Jam Japan 2011 T-shirtによると、「Quine を書いたこ…

アラビア数字・ローマ数字変換

お題:アラビア数字・ローマ数字変換 - No Programming, No LifeをErlangでやってみました。やってみたのはけっこう前ですが放置していました。まずarabic_to_roman。ローマ数字には位取りの0がないのでちょっと表現が難しいですが、1、10、100の位について…

ErlangとJInterface

JIntefaceはErlangとJavaの相互運用を可能にするモジュールです。OTPに最初から含まれているので手軽に利用することができます。先日、ErlangにRPCで指示を出して、応答をJTreeで表示するというテストアプリを書いてみたところ思いのほか便利で、これに加え…

Erlangとビット演算

FeliCaのポーリングで取得できるPMmからコマンドごとのタイムアウト時間を計算する必要が生じたため、Erlangで書いてみました。PMmの各バイトを、2ビット、3ビット、3ビットに分けて計算するので、まずは取り出してみましょう。 4> <<E:2, B:3, A:3>> = <<2#10011101>>. <<1</e:2,>…

文字列を先頭から見て同じところまで除去 (2)

前回の記事で書いたソースをいじってみましょう。下記2点が気になりました。 リストに1つしか文字列がないときに期待通りの動きをしない。 これは、lists:all(Fun, []) が true を返すためですね。 1文字辿るのに2回もループを回している。 lists:all/2 と、…

文字列を先頭から見て同じところまで除去

お久しぶりです。No Programming, No Lifeで見掛けた表題のお題をErlangでやってみます。まず、文字列が2つのときを考えます。これは文字列のパターンマッチングを使えば問題なさそうですね。 -module(ahya). -compile(export_all). ahya([H1|T1], [H1|T2]) …

Erlangとパーサコンビネータ

Parsecの練習をしている最中、ふと「parsec erlang」で調べてみたら、Parsec Erlangを発見しました。 Parsec - HaskellWikiからもリンクされていますね。ドキュメントがほとんどなく、サンプルもまったく見つからないという巨大な問題があり(こちらのバージ…

よろしくお願いします。

gooブログ から引っ越してきました。よろしくお願いします。