Erlang

99 Bottles of Beer

30分プログラム、その537。"99 Bottles of Beer"を出力してみよう。 wikipedia:HQ9+のページを見ていたら、 9コマンドは『99 Bottles of Beer』(アメリカの数え歌で、プログラミングの例題でよく利用される)の歌詞を出力する。 と書いてあった。よし、例題…

ErlangでGUI(3) 〜レイアウト〜

30分プログラム、その533。ErlangでGUIをやってみよう、レイアウト編。 packerというwidgetを使うとレイアウトを制御できるらしいので、やってみた。X方向とY方向の重みを設定してpackerをつくったあと、そこにボタンなどを配置していく。なんとなくJavaのGr…

ErlangでGUI(2)

30分プログラム、その527。ErlangのGUIライブラリを使ってみよう、その2。(前回のやつ: id:mzp20090209:gs) ボタンを押すと押した回数を表示するプログラムを書いてみた。イベントに反応して、画面を更新する、というのをやりたかったので。 『ボタンがクリ…

ErlangでGUI(1)

30分プログラム、その523。ErlangでGUIにチャレンジ。 プログラミングErlangにはio_widgetというモジュールが登場するけど、これは標準ライブラリではなくて筆者が本のためにつくったモジュールらしい。 調べてみたところ、gs(= Graphic System)モジュールが…

Erlangでambを作ろうとしたら、いつのまにかmapになっていた

30分プログラム、その515。Erlangでambを作ろうとしたら、いつのまにかmapになっていた。 id:Gemmaさんが、またambを書いていた。ホントに ambって継続を使って、ひとつづつ計算してるけど、全部並列で計算しちゃえばよくね?と思ってErlangで作ってみた。そ…

ESDLを試したけど、失敗した。その2

前回のエントリ: http://d.hatena.ne.jp/mzp/20090102/esdl 30分プログラム、その508。こりずにErlangのSDLバインディング、ESDLを試して、またも失敗した。本当は、サーフェイスのピクセルデータを自分でごにょごにょして加算合成じゃい、αブレンディングじ…

ESDLを試したけど、失敗した

30分プログラム、その501。ErlangのSDLバインディング、ESDLを試したけど、うまくいかなかった。 画像をロードして表示するだけのはずなのに、まっしろなウインドウが表示されるだけ。なんとなく、MacPortsで入れたSDLが悪いんじゃないかという気がしてる。…

Erlangプロセス Schemeアクタ

30分プログラム、その444。id:Gemmaさんに昔のbit誌にのっていた「Scheme 過去・現在・未来」のコピーを貰ったので、そこに載っていたSchemeのアクタをErlangで再現してみた。やっていることはErlang プロセス <=> Scheme アクタ - Gemmaの日記と同じ…

算数にチャレンジ!(途中)

30分プログラム、その438。算数にチャレンジ!!より。うまくいかなかったけど、一応。 3ケタの整数を、繰り上がり計算がないような2つの整数A、Bの和にすることを考えます。例えば、532という数ならば、「A=111、B=421」や、「A=21、…

ProducerConsumer再び

30分プログラム、その432。前にやったProducerConsumerをもう一度やってみる。 前はJavaの実装を素直にErlangに移植しただけだった。でも、Channelがウェイトセットを持っているのがダサい。 じゃあ、なんでウェイトセットが必要かというと、ProducerやConsu…

ErlangでXML

30分プログラム、その427。ErlangでXMLを使ってみる。 ErlangでXMLをパースするには、標準添付のxmerlを使えばいいらしい。これでXMLをパースすると、以下のようなレコードになる。 -record(xmlElement,{ name, % atom() expanded_name = [], % string() | {…

ErlangでHTTPクライアント

30分プログラム、その420。ErlangでHTTPクライアントをば。 なんかのクローラ作りたいなー -> やっぱりクローラといえば並列して動かしたいよな -> 並列といえばErlang! というわけで手始めにHTTPでアクセスする方法を調べてみた。便利なライブラリが標準添…

0〜1000に含まれる0をカウントする

練習 - krystal: プログラミング超初心者(文系) - Rubyist via 0〜1000に含まれる0をカウントする - http://rubikitch.com/に移転しました30分プログラム、その414。0から1000までの0の個数を数えてみる。 せっかくのErlangなのでmapreduceで。mapreduceのコ…

ErlangでWorker Threadパターン

30分プログラム、その407。Java言語で学ぶデザインパターン入門 マルチスレッド編のWorker ThreadパターンをErlangでやってみる。 Worker threadパターンは要するに、スレッドをいくつか作っておいて、それを使い回わすためのパターン。プロセス生成が軽いと…

Erlangでfutureパターン

30分プログラム、その401。ErlangでJava言語で学ぶデザインパターン入門 マルチスレッド編に載ってるfutureパターンをやってみる。futureパターンはこんな感じで、別スレッドで値を計算させるやつ。 // 別スレッドで処理が走る Data data1 = host.request(10…

デジタル回路シミュレータ

30分プログラム、その393。SICPに載っていることで有名なデジタル回路シミュレータをErlangで作ってみる。 時間がなくて全部は無理だったので、ワイヤとプローブ、入力の3つだけ。そのうちANDやNOT、加算器とかも作るかもしれない。 使い方 test() -> Wire =…

ErlangでWebアプリ

30分プログラム、その387。yawsを使ってErlangでWebアプリを作ってみた。 Webアプリの内容はなんでもよかったので、適当に階乗を計算するやつにしてみた。割としっかりしてる印象を受ける。もしかしたら、コマンドラインで動作するプログラムよりも簡単にWeb…

OTPを試す

30分プログラム、その380。ErlangでOTPを試してみた。 OTPはErlangのライブラリの一種で、曰く「挙動パターンをまとめたもので、コールバックでカスタマイズ可能」。僕の理解は、無理矢理導入したファンクタ。 要するに、適当なコールバック関数を用意するだ…

ErlangでProducer-Consumerパターン

30分プログラム、その371。増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編に載っているProducer-ConsumerパターンをErlangでやってみる。 Javaと違ってwait()が無いので、キューが空のときにgetを待たせるのが結構、大変だった。やっぱり…

並列bogosort

30分プログラム、その363。id:mzp:20080825:shuffleの続きとして、bogosortをやってみる。 せっかくErlangなので並列バージョンも作ってみたけど、微妙。計算が終了したあとも余計なプロセスを殺してないので、余計なメッセージが飛んでくる。 使い方 1> Xs …

リストの要素のシャッフル

30分プログラム、その355。bogo sortをやろうと思ったら、シャッフルするための関数がなかったので、そちらから。 リストの要素をいれかえるのは思い気がしたので、いったん配列に変換するようにしてみた。 Erlangの配列は破壊的じゃないんだ。 使い方 1> sh…

Erlangでwho

30分プログラム、その351。前回(id:mzp:20080818:who)の続きで、Erlangでwhoを実装してみる。 やっぱりバイナリ構文は便利ですね。ただ、定数が実際にどう宣言されているかを全部見にいかないといけないのが面倒くさい。 使い方 1> who:load("/var/run/utmpx…

Problem50 - Project Euler

30分プログラム、その325。Problem50 - Project Euler。昨日のやつ(id:mzp:20080620:euler)の改良版。ログメッセージを出すようにしたのと、ちゃんと答えを表示するようにした。 使い方 1> problem50:solve(1000000). sive prime:2 sive prime:3 ... sive pr…

Problem50 - Project Euler

30分プログラム、その324。Problem50 - Project Euler。 素数41は6つの連続する素数の和として表せる: 41 = 2 + 3 + 5 + 7 + 11 + 13.100未満の素数を連続する素数の和で表したときにこれが最長になる. 同様に, 連続する素数の和で1000未満の素数を表したと…

Problem45

30分プログラム、その319。Problem45 - Project Euler。 三角数, 五角数, 六角数は以下のように生成される. 三角数Tn=n(n+1)/2 1, 3, 6, 10, 15, ... 五角数Pn=n(3n-1)/2 1, 5, 12, 22, 35, ... 六角数Hn=n(2n-1) 1, 6, 15, 28, 45, ... T285 = P165 = H143 …

Problem33

30分プログラム、その306。Problem33 - ProjectEuler。 49/98は面白い分数である. 「分子・分母の9をキャンセルしたので 49/98 = 4/8 が得られた」と経験を積んでいない数学者が誤って思い込んでしまうかもしれないからである. 我々は 30/50 = 3/5 のような…

Problem27 -実際に計算してみた-

30分プログラム、その300。昨日のコード(id:mzp:20080507:concurrent)を実際にマルチコアマシンで走らせてみた。 そこそこ時間がかかったけれど、時間をはかるのを忘れたので、どれくらいかかったのかはよくわからない。あと、一回、メモリ確保関連っぽいエ…

Problem27 -並列版-

30分プログラム、その299。- Problem27を並列で計算するように書き直した。 計算が遅いので、並列で計算して力づくで解いてしまう戦略。一応、並列版のmapを定義したり、io:formatがボトルネックにならないように別プロセスで出力するようにしたいりと、工夫…

Problem27

30分プログラム、その298。Problem27 via Project Euler。 オイラーは以下の二次式を考案している:n^2 + n + 41この式は, nを0から39までの連続する整数としたときに40個の素数を生成する. しかし, n = 40のとき402 + 40 + 41 = 40(40 + 1) + 41となり41で割…

Problem20

30分プログラム、その286。Problem20 via Project Euler。 n × (n - 1) × ... × 3 × 2 × 1 を n! と表す。 100! の各桁の数字の合計を求めよ。 桁の分解といえば、unfold。Erlangの標準ライブラリには無いので、Ruminations of a Programmer: Fun with unfol…