YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

OCaml

OPAMを使い始めた

はじめに こんにちは、Python界の情弱です。OCamlをしばらく書いていなかったのですが、久々に書こうと思い、環境を再セットアップしました。 もうOCaml 4.00.1が出ていたり、そもそもセットアップはOPAMでするのが楽ちんだったりするらしいので、試してみま…

なぜ次に学ぶ言語は関数型であるべきか

はじめに こんにちは、Python界の情弱です。ちょっと前にOCaml系のエントリを色々と眺めていたらYaron Minsky氏のエントリを見つけたので翻訳してみました。 OCaml for the Masses - ACM Queue Yaron Minsky氏はJane Streetで第一線で活躍されるエンジニアで…

Project Euler #89

はじめに こんにちは、Python界の情弱です。ブログをかれこれ1ヶ月近く放置していました。近年稀に見る多忙さでしたが無事に乗り切りました。(限界80%くらい)というわけで、久々にProject Eulerを解いてみたので書いてみます。 問題と自分の解答 問題はこ…

OCaml Batteries includedを使っていろいろ楽をしようとしたらビルドではまった

はじめに フーテミッターフ(こんにちは)、Python界の100万回生きたねこです。最近はありがたいもので色々なライブラリがLinuxでもMac OS Xでもビルド出来るようになっていますね。でもたまーにハマってなかなか動かないってことがあると思うんですが、今回…

pfffをビルドする

はじめに チャオ(こんにちは)、Python界のザッカーバーグです。最近「ソーシャル・ネットワーク」とかいう映画が流行ってるそうですね。僕も刺激されたのでFacebookが開発したソースコード解析ツールのpfffを試してみました。Python Hackathon 2011.02で紹…

n個の対応する括弧のパターン(続き)

はじめに こんにちは、OCaml界の桑原茂一です。id:nishiohirokazuがtmp.pyの解説という記事を書いていて、「あ、そういえば前これ俺が問題出されたやつだった」というのを思い出しました。自分の方のブログの記事を見直してみたらメモ化をしてないのですごく…

OCaml 3.12.0 リリース

ついにリリースされました。 OCaml News: OCaml 3.12 released! The Caml Language とりあえずビルドします。 公式ページに記載があった新機能は下記。(拙訳) レコードパターンの改良 明示的なメソッドのオーバーライド ローカルなopen タイプアノテーショ…

caml-coreを自前ビルドする

はじめに いちいちMacPortsにあるとかないとかでイライラするのがめんどくさくなったので、ゼロからビルドしまくった。この方が気持ち的には楽だよね、自分で全部入れるわけだし。 参考/パッケージダウンロード元 type-conv sexplib bin_prot fieldslib cor…

OCamlからmemcachedを叩く

はじめに 最近はOCamlからいろんなものとやり取りしたいなという心持ちなんですが、とりあえずmemcachedを叩いてみようかと思って始めてみました。 書いたもの とりあえず書いた。適当に書いただけなので動くかどうかも適当です。 ymotongpoo/ocamlmemcached…

戯れにOCaml 3.12.0 beta1を入れてみた

はじめに とりあえず出ているのでビルドしてみただけです。 configure まずmakeの準備。一応ビルドしておく。GNU makeじゃないとだめ。 $ sudo port install gmake $ make -v GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free…

n個の対応する括弧のパターン

はじめに ある日Lingrでチャットしてたら@nishioがタイトルで書いたような問題を出していた。たとえば n=1 なら ()、 n=2 なら ()(), (()) という具合。 最初は簡単に解けるっしょ、と思っていたけどこいつが意外と解けない。 基本的な考え方 師曰く、まず何…

OCamlMPIをインストールする(Snow Leopard編)

はじめに Ubuntu 10.04でのインストールはできたけれど、普段の開発OSであるMac OS X 10.6でもインストールしたい。これがハマったのなんのって。 参考 OCaml Forge: OCaml/MPI interface: Project Home Archives of the Caml mailing list > Message from R…

OCamlMPIのインストール(Ubuntu 10.04編)

はじめに 最近Project Eularで問題を解いてるんですが、brute force実装をする意外に方法がない時があります。しかしOCamlではマルチコアを有効に使う並列計算処理を書くのがちょっと手間らしいので、OCamlMPIを使うことにしました。 参考 OCaml Forge: OCam…

32bitのintでは足りない時のBig_int

はじめに OCamlでProject Eularを解き進めていますが、「50桁の整数」とか「1000の1000乗」とかいう値が平気で出てくるのです。もちろん、こういった数をまともに扱わなくても解けるような解法があるのですが、しかし扱わなければならない時もあります。でも…

Printf.printfで表示されない?

はじめに プログラムを実行している時に、各ステップでnotify的な表示をさせたい場合があるときに、Printf.printfを使ってたんですが、表示がうまく行われないことがあってなんでだろうと思ってたので @camlspotter に訊いたのでした。 Printf.printfにはflu…

Objective Caml 入門 手習い(7章)その1

演習問題がある章はこれでおしまい。 Objective Caml 入門 Exercise 1 問題 Exercise1 ref 型の値の表示を見て気づいている人もいるかもしれないが,ref 型は 以下のように定義された1フィールドの更新可能なレコードである. type 'a ref = { mutable co…

Objective Caml 入門 手習い(6章)その4

いよいよ6章も最後。 Objective Caml 入門 Exercise 9 問題 Exercise9 関数 sift を定義し,⟨ 自分の学籍番号+3000 ⟩番目の素数を求めよ. 自分の答え type 'a seq = Cons of 'a * (unit -> 'a seq);; let head (Cons (x, _)) = x;; let tail (Cons (_, f…

Objective Caml 入門 手習い(6章)その3

6章の難関。自分でも自信がない。 Objective Caml 入門 Exercise 7 問題 数式の文字列表現を求める関数 string_of_arith, 分配則を用いて 数式を (i11  …  i1n1) + … + (im1  …  imnm) の形に変形する関数 expand を定義せよ. 自分の答え type arith = …

Objective Caml 入門 手習い(6章)その2

バリアント型の肩慣らしに入りました。 Objective Caml 入門 Exercise 4 問題 Exercise4 深さ n で全てのノードのラベルが x であるような 完全二分木を生成する関数comptree x n を定義せよ. 自分の答え type 'a tree = Lf | Br of 'a * 'a tree * 'a t…

Objective Caml 入門 手習い(6章)その1

いよいよ終盤になってきました。 Objective Caml 入門 Exercise 1 問題 Exercise1 以下のレコード型 loc_fig は,図形にxy平面上での位置情報をもたせたもので ある.正方形,長方形は,各辺が軸に並行であるように配置されていると仮定(長方 形に関して…

FizzBuzzをOCamlで書いた

Google Alertで"OCaml"をRSS購読してるんですが、タイトルだけ見て「そういえばやってなかったな」と思ったんで書いてみました。 OCamlでFizz Buzz - exp777:D 適当コードでもちゃんと動いた。とりあえずこれくらいはすぐに書けてよかった。 let rec fizzbuz…

Objective Caml 入門 手習い(5章)その5

ようやく5章が終わりました。 Objective Caml 入門 Exercise 7,8 問題 Exercise7 与えられた自然数 r に対して x2 + y2 = r であるような, (x,y) (ただし x ≥ y ≥ 0)の組を全てリストとして列挙する関 数 squares r を定義せよ.(検算用資料: r = 486122…

Objective Caml 入門 手習い(5章)その4

いよいよ5章の演習問題最大の山場(と勝手に思っている)quick sortの書き換え問題です。 Exercise 6 問題 Exercise6 quick 関数を @ を使わないように書き換える.quicker は未ソートのリスト l と,sorted というソート済でその要素の最小値 が l の要…

Objective Caml 入門 手習い(5章)その3

まだ5章は続きます。 Objective Caml 入門 Exercise 4 問題 Exercise4 f, g を適当な型の関数とする. map f (map g l) を map を一度しか使用しない同じ意味の式 に書き換えよ.map (fun x -> ...) l の ... 部分は? 自分の答え let f = string_of_float…

Objective Caml 入門 手習い(5章) その2

第5章からExerciseが増えてる。このエントリではExercise 3-6だけ。 Objective Caml 入門 なんかリストの章なのにリスト操作関数ほとんど使わないで解いてる。これは大量のツッコミを受けそうだ。。。 Exercise 3-6 a,b 問題 Exercise 3-6 リストを集合とみ…

Objective Caml 入門 手習い(5章)その1

やっとリスト操作の章に入りました。5章は演習問題が多いので長くなりそうです。 Objective Caml 入門 Exercise 2 問題 Exercise2 sum_list,max_list を,match を使わず null, hd, tl の 組合わせのみで定義せよ.match を使うテキストの定義と比べ,記…

Objective Caml 入門 手習い(4章 続き)

手習いはまだまだ続きます。 Objective Caml 入門 Exercise 4 問題 Exercise4 以下の関数 curry は,与えられた関数をカリー化する関数である. この逆,つまり (2引数の)カリー化関数を受け取り,二つ組を受け取る関数に 変換する uncurry 関数を定義せ…

Objective Caml 入門 手習い(3章 続き、4章)

Exercise 11-3,4 問題 Exercise11 以下の関数を定義せよ 3. 末尾再帰的関数を使ってフィボナッチ数を計算する fib_iter. (fib_pairを元にするとよい.) 4. 与えられた文字列のなかで ASCII コードが最も大きい文字を返す max_ascii 関数.文字列から文字…

Objective Caml 入門 手習い(3章 途中まで)

相変わらず2日目もOCamlやってますよ。 Objective Caml 入門 今度は関数の定義とかの3章です。 Exercise 3,4 問題 Exercise3 2実数の相乗平均をとる関数 geo_mean を定義せよ. Exercise4 2行2列の実数行列と2要素の実数ベクトルの積をとる関数 prodMa…

OCamlで自分で学ぶ際にやること

id:camlspotterに教えていただいたことをメモ。 $ ocamlc -whereこれでOCamlの標準ライブラリがある位置を調べられる。*.mliにはどんな関数が定義してあるかが書いてあり、*.mlには当然実装がある。