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…
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を分…
モジュールは分けたいんだけどファイルは分けたくない。ファイルは分けたいんだけどモジュールは分けたくない。
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 ... -> ....と書…
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>…
なんかここ1年くらいメールが流れてないんですが・・・
ocaml.jpって影が薄くないですか?私がほとんど見ないだけかもしれませんが。私が欲しい情報はあこにはもう無いことがわかっていて、逆に私が答えられそうな疑問が書かれていることが無いこともわかっているのです。そういうわけで、とりあえずhttp://wiki.o…
来年のLLDN(に相当するイベント)にOCamlからも発表するというのは良いと思います。LanguageUpdateや「君ならどう書く」のスピーカーを募集したという話は聞いたことがありませんので、裏でごにょごにょやってるんじゃないかと想像してます。ま、来年のLLDNが…
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とかオプションを用意しておけば良いわけで。
うはwwwshift/reduce conflictsの取りかたわかんねwwwwwっうぇうぇwwww
rubyコマンドを実行し、pipeを利用して実行結果*1を受け取ろうとしたら、なぜかパーサがブロックしてしまい残念な結果になってしまっていた。もういやになってうっちゃっていたが、このままではTyping Rubyの開発が一歩も進まないので*2、落ち着いて調べてみ…
Win32でのocamloptの実行にMASMが必要ってどういうことだよ。別にそれはいいんだけど、MASMの実行ファイル名がmlってのはかんべんしてほしかった。mlって、ソースコードのファイル名がなんかしてるのかと思っちゃうじゃないか。
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>…