OCaml

付かない!

すみません。またうそつきました。http://d.hatena.ne.jp/yoriyuki/20051226#p2 それはそうと、OCamlのオブジェクト型とレコード多相との違いが良く分からないのですが、どなたか簡潔に説明していただけたりしないかな、と。他力本願ですが。 とyoriyukiさん…

"あ"というSJISのプログラムはコンパイルできない。

いや、Mapがpolymorphicになってるのが読みにくい原因じゃないだろうか。と思ったので、適当にMonomorphicなMapを定義しました。mli追放!!

あれだけ「型は書かない」と言っていたのに、*.mli書いてます。すごい敗北感。コンパイルエラーが読めなくって…

型を書く話

mixiのOCamlコミュニティより。まず、わたしゃ書きません。.mliも書きません。openするのもめんどくさがる人間ですよ?書いてられるか、めんどくせえ。それはそれとして、 しかし、型を書かないことによって、本当に型が間違っている箇所と違う箇所が型エラー…

http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20051122#p06ほんと、すみませんorzで、こんなんでどうでしょう。 # class eq = object (self:'a) method eq (x:'a) = not (self#neq x) method neq (x:'a) = not (self#eq x) end;; class eq : object…

recursiveなメソッド定義ができない件

http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20051118#p05ぐえ。知らんかった…再帰的に定義できるようにすると、まずいことがあるんだろうか…あるんだろうなあ、、、まいった。※うそでした。まあ、それはそれとして、 # let (=) x y = Pervasives.…

型を書いておいて欲しいという話

http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20051115#p01Haskellを初めて見たときは、型推論があるのに、型宣言がたくさん書かれていたので、ちょっとびっくりした記憶があります。Haskellくらいリッチな型システムは、型推論できなかったかも。…

$

結局、 let (^$) f x = f x let (<$) f x = f xとかしてます。 Printf.printf "Typing.solve: eq => %s=%s\n" (Type.to_string (fst eq)) (Type.to_string (snd eq));を Printf.printf "Typing.solve: eq => %s=%s\n" <$ Type.to_string ^$ fst eq <$ Type.t…

$

http://www.jmuk.org/d/?path=2005/11/11#d11t04がーん…左結合してしまうからいまいち面白くないことは、気づいていたのですが、Camlp4のキーワードだったとは。左結合でも、 # Printf.printf "%d %s" $ int_of_string "10" $ string_of_int 100;;とか書ける…

$

Haskellの$がやっと理解できたかも、という話。f $ xはf xと同じで、なにが嬉しいのか良くわからなかった。きっと遅延評価でなんか嬉しいことがあるんだろうかと想像して、正格なOCamlではきっとなにも嬉しいことがないんだろうと思っていた。ところが、実は…

モジュール

http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20051109#p03まあ、つまるところただの無いものねだりのわがままなのですけど。openすれば良いのはもちろんなのですが、openすると忘れたり名前にいっそう迷いそうで嫌なのです。誰かがローカルにopen…

続ラクダのジレンマ

http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20051109#p02もちろん言葉遊びですがわりと真剣に悩んでます。 自分でmoduleを定義する Type.KindとかType.TypeSchemeとか、ネストしたモジュール名が嫌。タイプするのがめんどいから。なぜmoduleを分…

ラクダのジレンマ

モジュールは分けたいんだけどファイルは分けたくない。ファイルは分けたいんだけどモジュールは分けたくない。

ocamllexで利用できる正規表現(3.08.4)

http://caml.inria.fr/pub/docs/manual-ocaml/manual026.html#とasが何気に便利。特にasは多用してる。Lexing.lexemeとか書かなくなって幸せ*1。 *1:Lexing.lexme(eが抜けてる)とよく書いてしまって悔しい思いをしていたので

プログラミング

ごそごそリファクタリング。この辺は、テストをサボっていたところなので、ちゃんと書かないとなあ。今日は少し寝て授業に行ったら、停電で大学から帰ってくるだろうから、続きは帰ってからだな。 テストを書いて クラスを定義できるようにして か。テストは…

ぱたーんまっちんぐ

.... | pattern1 when cond -> body | pattern2 when cond -> body ....では、 pattern1にマッチ condをテスト → 失敗 pattern2にマッチ condをテスト → OK bodyの評価 となる。 .... | pattern1 | pattern2 when cond -> body ....では、同じ入力に対して …

ぱたーんまっちんぐ

よくわからないのは、 .... | (x, SomeConstructor a) when ... -> .... | (SomeConstructor a, x) when ... -> .... ....みたいなコードで、whenの中身を共有したいときに、 .... | (x, SomeConstructor a) | (SomeConstructor a, x) when ... -> ....と書…

immediate objects

http://caml.inria.fr/pub/docs/manual-ocaml/manual005.html#ss:immediate-objectsOCaml 3.08から入った、オブジェクト式。 # let x = object method f x = x+1 end;; val x : < f : int -> int > = <obj> # x#f 3;; - : int = 4とかできる。先日気づいたのだが</obj>…

OCaml Users ML

なんかここ1年くらいメールが流れてないんですが・・・

ocaml.jpって影が薄くないですか?私がほとんど見ないだけかもしれませんが。私が欲しい情報はあこにはもう無いことがわかっていて、逆に私が答えられそうな疑問が書かれていることが無いこともわかっているのです。そういうわけで、とりあえずhttp://wiki.o…

LLDN

来年のLLDN(に相当するイベント)にOCamlからも発表するというのは良いと思います。LanguageUpdateや「君ならどう書く」のスピーカーを募集したという話は聞いたことがありませんので、裏でごにょごにょやってるんじゃないかと想像してます。ま、来年のLLDNが…

なぜHaskellは盛り上がり、OCamlは盛り下がるのか

http://www15.ocn.ne.jp/~rodinia/Blog/MyJournal40.html#p8変すぎて相手にされないのではなく、普通すぎて相手にされないというのは、悲しいような、別にいいような。 Haskellは変すぎるので、それで何かを書くだけですごく見えるが、OCamlはわりと普通の言…

アルゴリズムが、Rewriting ruleの形で与えられています。 a - c みたいな感じ。aとかの集合Eがあって、Eの中に書き換えられるものが無くなったら停止、というアルゴリズム。こういうのどうやって書いたら良いんでしょうか。

相互再帰なモジュールってどうやって定義したっけ…あった。http://caml.inria.fr/pub/docs/manual-ocaml/manual021.html

よく考えたら、unit-testと本体プログラムを分ける必要なんて無いじゃないか。--testとかオプションを用意しておけば良いわけで。

ocamlyacc

うはwwwshift/reduce conflictsの取りかたわかんねwwwwwっうぇうぇwwww

pipe

rubyコマンドを実行し、pipeを利用して実行結果*1を受け取ろうとしたら、なぜかパーサがブロックしてしまい残念な結果になってしまっていた。もういやになってうっちゃっていたが、このままではTyping Rubyの開発が一歩も進まないので*2、落ち着いて調べてみ…

ocamlopt

Win32でのocamloptの実行にMASMが必要ってどういうことだよ。別にそれはいいんだけど、MASMの実行ファイル名がmlってのはかんべんしてほしかった。mlって、ソースコードのファイル名がなんかしてるのかと思っちゃうじゃないか。

CのプログラムからOCamlの関数を呼び出す

Callbackモジュールを使う。foo.ml let f x = x+1; let _ = Callback.register "Foo.f" fmain.c #include <caml/mlvalues.h> #include <caml/callback.h> int f(int i) { value * f = caml_named_value("Foo.f"); return Int_val(callback(*f, Val_int(i)); } int main(int argc, char *argv[])</caml/callback.h></caml/mlvalues.h>…