1 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 07:15:21 .net] 関数型言語MLについて語るスレッドです。 MLは、確固とした理論的背景を持つ言語でありながら、 現実的なソフトの開発にも使用できる実用性を備えた言語です。 また、プログラミングの初心者が最初に学習する言語としても優れています。 総本山 Standard ML www.smlnj.org/ Objective Caml caml.inria.fr/ocaml/ 前スレ 関数型言語ML(SML, OCaml, etc.), Part 5 pc12.2ch.net/test/read.cgi/tech/1186292994/
101 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 18:50:55 .net] >>99 完全にスレチだが、別にマシンを用意しなくても仮想環境を使えば楽なのに。
102 名前:82 mailto:sage [2009/06/30(火) 18:57:35 .net] セレロン1G、メモリ256Mしかないノートなんです。仮想環境は無理では。 Knopixとかならできるのかな?
103 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 23:12:27 .net] >>101 virtual boxでdebianがおすすめです。 かなり低スペックでも動いて、何よりaptーgetでocamlも含め、たいていのライブラリが簡単にインストール出来ます。
104 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 00:05:15 .net] プログラミングinOCamlの練習問題5.6 @を使わずにquick_sortを書き換えよ ヒント:引数を一つ増やして整列済みのリストを受け取る ってやつが解けまへん。。 教えて、偉い人
105 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 01:27:12 .net] >>102 まじっすかー!ありがとうございます。 今Ubuntuのデュアルブート環境作成厨…orz ウブンツ重かったらそちらを試してみます。
106 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 01:35:56 .net] >>103 本読んでないけど末尾再帰じゃないすかね。
107 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 08:39:57 .net] >>104 apt getはububtuもdebianもほぼ同じなので、ububtuでも大丈夫ですよ。
108 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 16:48:02 .net] virtual box + debian + OCamlで作成したネイティブコードはやっぱり Windows上では動かないん?会社がWindowsだから・・・。 動くなら今すぐそっちの環境に移行したい。
109 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 16:55:45 .net] &g
110 名前:t;>107 当然動く訳無い。 大体Linux上で生成されるオブジェクトファイルはELFフォーマットだし。 [] [ここ壊れてます]
111 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 21:24:54 .net] OCamlってLLVMのコード吐けるんじゃなかったっけ
112 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:07:04 .net] >>109 憶測で物を言うな。吐かない。終わり。
113 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:15:48 .net] LLVMのocamlバインディングはある。という話と取り違えたのかな。
114 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 12:14:41 .net] >>110 終わったところすまないが、>>109 は吐ける!と断定しているわけではないから もう少し生暖かくてもいいと思うんだ。
115 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 12:49:21 .net] >>112 >>110 はいい加減なこと言う奴にうんざりしてるんだろうな。 この板はそんな奴ばかりだから、せめてソースくらい示さないと。
116 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 05:15:37 .net] LLVMのコード吐けるようにしようぜ、という話だけなら有った気がするが
117 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 08:55:56 .net] >>114 しーっ!そういうこと言うと 憶測で(ry とか言われちゃう
118 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 12:38:28 .net] >>103 「書き換えよ」とか「引数を一つ増やして」といわれても元々のコードがないと 答えられないぜよ。
119 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 17:08:59 .net] 偉い人は プログラミング in OCaml を買ってないので答えられないのではないか。
120 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 18:05:20 .net] >>117 そういえばOcaml-nagoyaの連中(有限会社ITプランニング)ってどうなったの? なんか公式サイトにつながらないんだけど。
121 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 19:23:03 .net] OCamlは大文字で始まるidはconstructor扱いになるんだな SMLのコードを移植していてはまった
122 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 11:16:05 .net] ocaml触ってみたんだけど、やっぱりライブラリが少ないね。 練習でちょっとしたものを作ろうとしたけど、ライブラリの少なさでたちまち不便で止まってしまった。
123 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 11:52:02 .net] そんなに副作用たっぷりのコードを書きたいならF#でも使えばいいのに
124 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 12:10:39 .net] 副作用の無いライブラリを作るのは難しいの?
125 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 12:19:32 .net] >>122 HaskellならMonad IOがスタンダードだが、OCamlにはないからね。 IOはどうしても副作用になってしまう。
126 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 12:32:25 .net] それでF#でも使えと言われると辛いね…
127 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 13:37:39 .net] >>120 どんなライブラリが欲しかったのん?
128 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 13:58:47 .net] >>118 憶測(ry じゃなくて、本が違う。 ITplan は知らんけど、一日ぐらいサイトが落ちてていいだろ。週末だし。
129 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 14:19:25 .net] >>126 どうでも良いけど、365日接続できないサイト運営してる時点で技術力を疑う。
130 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 14:34:19 .net] 休日にメンテなら仕方ないけど、平日の夕方に落ちてるのは問題だな。
131 名前:ogasawara mailto:sage [2009/07/04(土) 17:30:22 .net] >>118 ,126,127,128 恐縮です。うちが契約してるデータセンター屋さんの電源障害だそうで、何ともならなくて。 そろそろ復活するらしいのですが、うーん。
132 名前:ogasawara mailto:sage [2009/07/05(日) 09:28:07 .net] >>120 The Caml Hump(caml.inria.fr//cgi-bin/hump.en.cgi )という ところがあって、ここでライブラリを探すとかなり見付かりますよ。 CGI、DB接続、GUI、UTF-8、アルゴリズム色々など有ます。
133 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 15:57:43 .net] 質問です。match文に関する質問です。 これは文法の慣習みたいなものかなと思うんですがどうなのかなぁと。 リストを受け取って何かを返す関数の場合、リストの要素が組やレコードだと match文の中にmatch文を書くことがありますが、match文ではなく直接パターンマッチさせる書き方の方が 良いのでしょうか? >>83 vmwareを使ってxp上でubuntuを動かして、ocaml勉強してます。
134 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 16:48:01 .net] >>131 質問をするときはサンプルコードを示したほうが回答してもらいやすいよ。 この文章だと >match文ではなく直接パターンマッチさせる書き方の方が良いのでしょうか? あたりがわかりづらいと思われ。
135 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 17:28:04 .net] >>132 kekkonっていう関数で、anataというレコードが要素のリストを引数にして 条件に合う人数を返すとかいう場合に・・・ let rec kekkon anata = match anata with [] -> 0 | first :: rest -> (match first with {name = n; toshi = t; syunyu = s; tyotiku = t; sisan = s; youshi = y} -> 0 とかと書かずに、以下のように書くほうがいいのかなぁという質問です。 let rec kekkon anata = match anata with [] -> 0 | {name = n; toshi = t; syunyu = s; tyotiku = t; sisan = s; youshi = y} :: rest ->
136 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 17:44:47 .net] >>133 お好きな方を。ただ、 let rec kekkon anata = match anata with は let rec kekkon = function の方が簡潔。
137 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 17:46:33 .net] どっちでもいいんですね。どもです。
138 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:49:38 .net] >>133 このサンプルコードのように
139 名前:激Rードであれば直接アクセスするっていう手も あるよ。タプルの場合は状況にもよるけど2番目の方法が多いんじゃないかな。 [] [ここ壊れてます]
140 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 09:38:23 .net] record label に折角意味のある名前を付けてあるのに、 pattern match でワザワザ意味不明な変数に束縛するスタイルはおかしい。 そんなことするから s が二回束縛されてるヨ。 136 の言うように r.name とかでアクセスするほうが普通。
141 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 16:02:51 .net] データ構造について調べていたら ttp://en.wikipedia.org/wiki/VList のVlistというものを見つけたのですが、これはリストを使った 動的配列のようなものでしょうか。(英語が苦手のためよくわかりませんでした) また、OCamlで書くとどのようになるのでしょうか。 分かる方がいたら教えてください。
142 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 20:09:46 .net] まぁ、List.nth が妙に早い list と思えばいいね。 答えが欲しいの?それとも一緒に考えてほしいの? Okasaki には載ってないね。
143 名前:(* 〜 *) mailto:sage [2009/07/10(金) 22:04:04 .net] 長さが倍になっていくarrayが中身のリンクリストにしか見えないんですけど。 英語が読めなくても図は見えますよね。 構造はこんな感じでいいんじゃないの(図のまんま)。 type 'a vlisti = VLNil | VLCel of 'a vlisti * int * 'a array type 'a vlist = 'a vlisti * int 操作は自分で考えませう。
144 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 22:38:27 .net] >>140 ありがとうございます。コードのおかげでなんとなくですが イメージできました。(とはいってもこのデータ構造が どんな風にありがたいのかは、まだ理解できてはいないのですが・・・)
145 名前:139 mailto:sage [2009/07/11(土) 08:49:39 .net] 教育上は type 'a vlisti = VLNil | VLCel of 'a vlisti * int * 'a option array のほうが良いです。 140 だと埋まって無いトコを埋める値が必要ですね。(Obj.magic 0 などで埋めるのはダメ絶対。)
146 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 20:12:39 .net] ctags5.8でOCamlがサポートされたらしいよ。
147 名前:143 mailto:sage [2009/07/12(日) 20:52:01 .net] ctags -> Exuberant Ctagsに訂正。
148 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 08:02:09 .net] otagsがいらなくなると嬉しいな 微妙にctagsとオプションが違ったりするのがウザかったんだ
149 名前:デフォルトの名無しさん [2009/07/23(木) 08:24:19 .net] OCamlからCへのトランスレーターってありませんか?
150 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 09:00:30 .net] >>146 groups.google.com/group/fa.caml/browse_thread/thread/cc13807fa7204874/91529afa62a52640
151 名前:デフォルトの名無しさん [2009/07/25(土) 19:43:01 .net] OCamlで (('a -> 'b) -> 'a -> 'b) -> 'a -> 'b = <fun> int -> int = <fun> で型だけを指定して変数を宣言することはできますか?
152 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:52:22 .net] 変数何それ怖い というか何がやりたいのか全くわからん
153 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:07:08 .net] >>148 の型を持つ識別子なら定義出来る
154 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:07:51 .net] ただ、上は-rectypesなしで出来るかはわからん
155 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:13:20 .net] 型注釈を使った無名関数をかいていて、ふと閃いて fun (x:('a->'b)->(z:'a->'b)) z -> z;;としたところ - : (('a -> 'b) -> z:'a -> 'b) -> 'c -> 'c = <fun> のように受理されましたが、3つのうちの最初、z:'aのz はどういう意味があるのか わかりません。 fun (x:('a->'b)->(z:'a->'b)) -> z;; としてもzは拘束されていないようですし。
156 名前:148 mailto:sage [2009/07/26(日) 21:13:50 .net] それはxという識別子をxはintである、ということだけ指定して 宣言できるということですよね?やりかたを教えていただけますか?
157 名前:148/153 mailto:sage [2009/07/26(日) 21:15:14 .net] >>148 は >>149 >>150 様あてです。失礼しました。それと回答ありがとうございます。
158 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:59:56 .net] 変数が宣言できるとは言ってない ただ、関数の引数などにアノテーションすることで 関数の定義範囲を狭めることは出来る 普通の定義 let f x = x;; 型全体 let f x : int = x;; let f x : int ->int = x;; 引数 let f (x:int) = x;; let f (x:int->int) = x;; >>148 の上の型は、これを使って Yコンビネータの型をint->intで制限したもの
159 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:00:46 .net] int->intじゃなくて'a->'bだった
160 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 10:29:45 .net] 質問者はもう少し動機などを書き加えてほしい。推敲した上で。 背景説明無しに、間違った用語で質問されても答えられません。 逆に説明があれば、多少間違っていても回答者の方で正しく解釈できます。 148 だけだとホントに意味不明だが 153 からすると、C における int x; の様に「変数を宣言」できるか、というのが質問の意図だと思いますが、 ML では値の無い「識別子の束縛」は出来ません。 154、お前は未来に向けて話しているのか。 >>152 z:'a の z は識別子ではなくラベルです。後の z とは関係ありません。 文法をちゃんと確認して、ラベル付き引数の解説を読んでください。
161 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 12:36:02 .net] 切口上的に始まる親切なレス乙!
162 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:57:41 .net] val come_on : orz -> or2
163 名前:デフォルトの名無しさん [2009/07/29(水) 13:23:33 .net] >>159 ありがとうございます。Yコンビネータのようなものを作ろうとしていました。 非常に参考になりました。 >>154 が回答に感謝しているのは >>150 の、出来る、が回答になっていると思ったからなのですが。
164 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 21:32:04 .net] (('a -> 'b) -> 'a -> 'b) -> 'a -> 'bという型の識別子を定義できる と Yコンビネータを定義できる は100光年くらい離れてる気がする
165 名前:デフォルトの名無しさん [2009/08/15(土) 12:47:34 .net] (///)のような演算子をつくってhaskellのようなリスとりてらるを部分的に実現したいです。 (3///5) == [3;4;5] みたいな感じ。 演算記号は何が適当ですか?
166 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 15:34:30 .net] ( -- ) をどっかのサンプルコードで見たな
167 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:40:51 .net] >>163 List.iter print_int (1--100) とかですか? いいですね。見やすいです。
168 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:26:49 .net] SML/NJから移ってきましたが、SMLとは色々と違う部分が多くて戸惑います。 OCamlの標準ライブラリに無いものは自分で実装しているのですが、SMLとの コンパチを取るライブラリなどがあったりするのでしょうか?
169 名前:165 mailto:sage [2009/08/22(土) 22:50:51 .net] 再度すいません。SML/NJにはCompilation Managerというものがあってmake相当 のことが出来るのですが、OCamlではUnixのmakeを使うのが普通なのでしょうか? OCamlのドキュメントではmakeを使った例が書いてありました。 それとも、omakeというものがあるようですが、これを使うのが今時のやり方で しょうか。
170 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 23:24:33 .net] それはおまけ
171 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 21:30:22 .net] なんかcaml.inria.fr が異様に重いんだけど、どうかしたのかな。 www.inria.fr は普通に繋がるだけに。
172 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 09:06:37 .net] SMLとのコンパチを取るライブラリなんていう後向きの物は聞いたことありません。 OCaml の stdlib は「標準ライブラリ」にあらず、 OCaml 自身をコンパイル するために最低限必要な関数を集めただけと考えたほうが幸せです。 「次世代」標準ライブラリ候補として Extlib, OCaml Batteries Included, Jane Street Core などありますからそれのウチ好きなのを使ってください。(Batteries は Extlib を内包しているはず) ビルドは make か OCaml 付属の ocamlbuild か omake か、別に何でも良いんじゃない? - GNU make : どこにでもある。他でも使える。枯れてる。 - ocamlbuild : OCaml に付属。全く使えない。 - omake : 超強力、普通インストールされていない。強力過ぎて一線を超えた使いかたが難しい。
173 名前:165 mailto:sage [2009/08/24(月) 23:26:43 .net] >>169 ありがとうございます。 ExtLib, Batteriesの双方に同じ名前のモジュールが含まれていたので疑問に思って いたのですが謎が解けました。SML Basis Libraryにあるような関数は、名前違いで 大体ExtLibでサポートされているようで安心しました。 ビルドツールはGNU makeを主に使ってきたのですが、omakeはファイル更新の チェックが素晴らしいようなので、omakeを使ってみます。
174 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:41:33 .net] なんでもいいから早く標準に入れてくれ 追加インストールとか面倒だし
175 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 12:34:52 .net] こんなとこで呟いても何も起こらんよ。
176 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 14:33:39 .net] だれかOCaml Meetingいった?
177 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 20:45:28 .net] いったよー おもろかったけどgolfとかコンパイラ改造とかネタが裏街道過ぎて 実用志向のユーザー増えねえだろこれじゃ、とか思った
178 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 22:15:16 .net] 行かなかったが、ストリーミングでアメリカ人?の発表のところまで見た。 Golfの話は意外と参考になった。演算子定義周りとか、普段あまり使わないから。 演算子によって優先順位が固定されているの勉強になった。 あとObj.magic。あれは反則技だろw
179 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 05:40:38 .net] OCamlが+-*/等の演算子をpolymorphicに出来ない理由って何?
180 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 17:30:37 .net] jocamlをmingw上でコンパイルするにはどうすれば良いでしょうか。
181 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 17:32:57 .net] jocamlをmingw上でコンパイルしようとするとこんなエラーが出ます。 $ ./configure $ make world ・・・ gcc -o ocamlrun \ prims.o libcamlrun.a -lm libcamlrun.a(main.o):main.c:(.text+0x26): undefined reference to `caml_expand_command_line' libcamlrun.a(sys.o):sys.c:(.text+0x4ea): undefined reference to `caml_win32_random_seed' libcamlrun.a(startup.o):startup.c:(.text+0x936): undefined reference to `caml_signal_thread' libcamlrun.a(signals_byt.o):signals_byt.c:(.text+0x46): undefined reference to `caml_win32_signal' libcamlrun.a(signals_byt.o):signals_byt.c:(.text+0xab): undefined reference to `caml_win32_signal' collect2: ld returned 1 exit status ・・・
182 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 18:09:02 .net] 多分 configure したのが間違い。 OCaml の mingw のビルドを参考にしたら? JoCaml には付いて無いけど OCaml の README.win32 に書いてある。
183 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 20:36:00 .net] >>179 ありがとうございます。 cp config/m-nt.h config/m.h cp config/s-nt.h config/s.h cp config/Makefile.msvc config/Makefile config/Makefileの中身のOTHERLIBRARIESからlabltkを削除し、PREFIXをインストールしたいディレクトリに変更し、 make -f Makefile.nt world を実行したまでは良かったのですが、 make[1]: *** No rule to make target `win32.c', needed by `win32.o'. Stop. make[1]: Leaving directory `/d/tmp/jocaml-3.11.1/byterun' make: *** [coldstart] Error 2 と出てストップしてしまいます。 jocaml-3.11.1にはwin32.cが入っていないようですが、これは不具合ということでよろしいでしょうか。
184 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 21:23:00 .net] mingwなんだからMakefile.mingw使わなきゃならないと
185 名前:179 mailto:sage [2009/09/09(水) 21:31:19 .net] さーねぇ、俺は JoCaml 使ったこと無いからこれ以上は判らんね。 同じバージョンの OCaml から引っ張って来たら運が良かったらビルドできるかも知れないが、 こんなトコで聞くくらいだったら JoCaml の人に win32.c 無いって聞く方がいいんじゃない?
186 名前:179 mailto:sage [2009/09/09(水) 21:45:10 .net] >>181 ん?あ、確かに。リンクエラーも判らんし README も読めんのに挑戦かよ。
187 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 22:30:08 .net] OCamlから足りないソース持ってこないといかんかもね それで動く保証はないけど
188 名前:デフォルトの名無しさん [2009/09/09(水) 22:31:05 .net] unix でやるのが早いでしょ。
189 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 22:34:59 .net] >>181 あ、Makefile.mingwでやりました。 上のはコピペで修正し忘れていました。
190 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 22:36:17 .net] >>185 JoCamlでアプリを書くつもりなので、Windowsでないとダメなんですよ。
191 名前:デフォルトの名無しさん [2009/09/09(水) 22:47:01 .net] Luc でさえ、windows で試してないって言ってるし、 イバラの道じゃないかねー。Luc に聞かんと誰もわからんよ。 ちなみに win32.c は jocaml のレポから随分前に消えてる。
192 名前:デフォルトの名無しさん [2009/09/09(水) 22:49:38 .net] jocaml.inria.fr/ に We distribute JoCaml as sources. Those sources are for Unix systems と書いてあるが、これは読んだのか?
193 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 20:25:19 .net] Batteries Included のドキュメントみてたら リスト内包標記とか where 節とか open Module in とかあってびびった 使ってる人いる?
194 名前:デフォルトの名無しさん [2009/09/12(土) 11:44:43 .net] 既存のp4拡張をいろいろ集めただけでしょ。 open in はオーバーヘッドを理解してれば使える。
195 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 12:29:49 .net] オーバーヘッドあるんだ。
196 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 12:56:31 .net] open M in e は let module M' = struct open M let v = e end in v に変換されるので、ブロックを一つ作る。 普通はたいしたこと無いが、再帰関数中で open M in するのは少し考え物だ。
197 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 13:09:21 .net] すまん、let module M' = struct open M let v = e end in M'v の間違い let rec f x = open M in e (* e 中に f の再帰呼出あり *) とか書くと f の呼出しごとにブロックが出来て、時間とメモリを食う。
198 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 13:13:49 .net] M'.v ですー。
199 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:39:44 .net] 時間とメモリを食うのはコンパイル時じゃないの?
200 名前:デフォルトの名無しさん [2009/09/21(月) 22:22:32 .net] 実行時にもオーバーヘッドがある。気になるならベンチ取ってね。