1 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 14:03:05 ] MSResearchから出てきた.NETで使える関数型言語のひとつF# OCAMLの流れを汲むこの言語、いろいろと面白そうなことができそう。 まだまだ英語の情報しかないこの言語について、幅広く語れ。 research.microsoft.com/fsharp/fsharp.aspx
116 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 10:25:49 ] F#はじめました。クロージャもどきを作ってみましたが、 let rec makeclr v n = let pr n = printf "closure %d\n" n in if n < 1 then v else (fun () -> pr(n)) :: (makeclr v (n - 1)) let makecl = makeclr [] ;; let v = makecl 10 in List.iter (fun x -> x()) v ;; リストの後方に追加するスマートな方法があったら教えてください。 逆にしたら怒られた。 (makeclr v (n - 1)) :: (fun () -> pr(n))
117 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 13:42:18 ] >>116 3行目で if n < 1 then rev v が定石かと思われ。 (makeclr v (n - 1)) @ [fun () -> pr n] は効率の面でおすすめできない。(´・ω・`)
118 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 14:37:10 ] >>117 ありがとう。最後にまとめて反転させたほうが早いわけですね。 末尾再帰になってなかったのでそうしたら反転の必要もなくなりました。 最初はforやwhileを使ってたのですがなんだかうまくないようです。 あまりforやwhileは使わないのでしょうか。配列専用の機能のように思えました。 let rec makeclr v n = if n < 1 then v else makeclr ((fun () -> printf "closure %d\n" n) :: v) (n - 1) let makecl = makeclr [] ;; let v = makecl 10 in List.iter (fun x -> x()) v ;;
119 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 15:11:11 ] >>118 ループとしてのfor, whileはほとんど使いません。(つーか、構文忘れてるし・・・。) ただし、内包表記のforはよく使います。 let makeclr n = [ for i in [1..n] -> fun () -> printf "closure %d\n" i ] でもまあ、最初のうちは再帰で解決する習慣を身につけるべきかと。(´・ω・`)
120 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 15:12:06 ] F#のメリットってなんですか? C#より優れてるところ、劣ってるところはなんですか? F#にできてC#にできないことってありますか?
121 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 16:04:01 ] >>119 こういうforの使い方があるのか。おいしくいただきまます。
122 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 20:08:41 ] あかん・・・手続き型べったりの俺には 簡単なコードで頭の体操するのが精いっぱい。 しかし使い慣れた Visual Studio で動くので なんとなく使えてる気になるけど。 やっぱり理論的な基礎をしっかりとやってない 専門学校上がりのコーダーには扱えないのかね。 Emacs における Emacs Lisp のように、 既存のネイティブ or ドトネトなプログラムの マクロ言語としておもしろい?とかオモタけど、 妄想だけにしときます。
123 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 01:28:33 ] >>118 を1行で。 [1..10] |> List.map (fun n () -> printf "closure %d\n" n) |> List.iter ((|>) ())
124 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 01:30:32 ] 暗号にしかみえんがみなさんはこういうのにメリット感じるの?
125 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 01:55:17 ] Microsoft、関数型言語F#をVisual Studioに統合へ――開発者からはおおむね好意的な反応 opentechpress.jp/developer/07/10/24/0310251.shtml
126 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 01:58:35 ] 手を広げすぎ
127 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 02:12:00 ] let flip f a b = f b a let delay f = fun () -> f let _ = [1..10] |> List.map (printf "closure %d\n" |> (delay >> flip)) |> List.iter ((|>) ())
128 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 04:27:16 ] right to leftの方が読みやすいかな。 let _ = List.iter ((|>) ()) << List.map (flip << delay <| printf "closure %d\n") <| [1..10]
129 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 08:26:45 ] 型推論ってなんですか?
130 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 09:46:24 ] 型を推論してくれるんです。
131 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 09:59:05 ] やけに賑やかDaNa
132 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 22:11:15 ] OCaml は整数型と実数型で足し算の演算子すら違って面倒だという話を聞いたことがありますが,本当ですか? F#もそうなってるんですか?
133 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 22:16:40 ] 整数の演算子 : + - * / 実数の演算子 : +. -. *. /.
134 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 22:47:06 ] めんどくさ
135 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 23:50:47 ] >>132 > 1 + 0.1;; 1 + 0.1;; ----^^^^ stdin(7,4): error: FS0001: This expression has type float but is here used with type int stopped due to error > 1.0 + 0.1;; val it : float = 1.1 > 1.0 +. 0.1;; 1.0 +. 0.1;; ----^^^ stdin(9,4): warning: FS0062: This construct is for compatibility with OCaml. Use the overloaded infix operator '+' instead. Disable this warning using --no-warn 62 or #nowarn "62" val it : float = 1.1
136 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:22:05 ] >>132 F#では演算子は共通になった。 .NETのサポートするデータ型を全部サポートしなきゃいけないのでこうなったものと思われる。 ただし暗黙の型変換はないので整数+実数の計算は変換が必要になる。 > 3.2 + float 2;; val it : float = 5.2
137 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:24:25 ] F#ってVS2008についてくんの?
138 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:41:11 ] OCamlってフランス製だっけ?
139 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 15:13:40 ] そうざます
140 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 23:39:11 ] おフランスwww
141 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 01:04:38 ] 140が見えない
142 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:21:33 ] なんで?
143 名前:名無しさん♯ mailto:age [2007/11/19(月) 14:52:34 ] F# 1.9.3.4が出ますた。( ゚д゚)ノ Asyncの実装がまた微妙に変わってますがな・・・。(´・ω・`)
144 名前:デフォルトの名無しさん [2007/11/19(月) 16:38:48 ] おぉ〜 この言語は普及するのかな
145 名前:名無しさん♯ mailto:sage [2007/11/19(月) 20:25:01 ] ありゃ、ライブラリのマニュアル、バージョン古いままだ・・・。(´・ω・`)
146 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 23:47:01 ] 普及するわけないだろwwwwwwwwwww
147 名前:デフォルトの名無しさん [2007/11/20(火) 16:06:16 ] 並列計算の需要がものすごく増えてきてるから普及するんじゃないかねぇ
148 名前:名無しさん♯ mailto:sage [2007/11/20(火) 16:20:04 ] Async型って、Haskellで type Async a = Cont () (Either a Exception) って脳内変換すれば、unit, bindの実装の意味が理解できることに最近気がついた。 で、ごく一部の方々がActionを使った継続をやけに議論してた意味もようやくわかった。(つД`)
149 名前:名無しさん♯ mailto:sage [2007/11/20(火) 20:05:10 ] Eitherじゃぜんぜんダメだった・・・。orz エラー系の継続を最初からずっと保持してなきゃならんので、結局 type Async a = (a -> (), Exception -> ()) -> () こうするしかないですわ。(´・ω・`) でも、Asyncってモナド則を満たしてるんかいなという新たな疑問も・・・。
150 名前:名無しさん♯ mailto:sage [2007/11/20(火) 20:14:12 ] あ、型コンになってなかった。(´・ω・`) data Async a = Async ((a -> (), Exception -> ()) -> ())
151 名前:名無しさん♯ mailto:sage [2007/11/21(水) 08:05:42 ] Asyncを単純化するとこんな感じなのかな?( ´・ω・) #light type Async<'a> = Async of (('a -> unit) * (exn -> unit) -> unit) with static member Run (Async x) = x let unit a = Async (fun (cont, _) -> cont a) let bind m k = Async (fun (cont, econt) -> let cnext = fun a -> try Async.Run (k a) (cont, econt) with exn -> econt exn Async.Run m (cnext, econt)) で、実際にはここでのunit→resultPrim, bind→bindAsyncPrim相当でしかなくて、 これにキャンセルサポート(AsyncGroup)を追加してはじめてresultAsync, bindAsync相当になる、と。 モナドの定義自体にはスレッド云々は関係なくて、モナドを起動する側(Run, Spawn)の方で スレッドに結びつけてる、と。 これをC#で表現するのはめんどいのう。(´・ω・`)
152 名前:デフォルトの名無しさん [2007/11/21(水) 13:31:20 ] 関数型言語は図で説明できますか? フローチャートのように。 それが出来ないと、企業で使うのは難しいと思う。
153 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 13:48:56 ] フローチャート(笑)
154 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 13:53:48 ] 次の質問をどうぞ
155 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 14:30:48 ] 質問が正確じゃないな。 「Javaはむずかしすぎて使えません!」とギャグでなく主張する ド低脳にとっては関数型言語のほうが簡単なのですか? そうでないと、ドカタが使うのは難しいと思う。 こうだろ。
156 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 14:38:19 ] おもしろくないよ
157 名前:名無しさん♯ mailto:sage [2007/11/21(水) 21:33:54 ] あ、>>151 間違えとる。(´・ω・`) Async.Runは Async<'a> -> 'a にしないとダメなのか・・・。 >>151 の実装は flip asyncApp 相当に過ぎないか。
158 名前:名無しさん♯ mailto:sage [2007/11/22(木) 01:13:05 ] うーん、やっぱりキャンセルサポートなしでAsync.Runまで作っても複雑になるなあ・・・。 #light type Async<'a> = Async of (('a -> unit) * (exn -> unit) -> unit) let app (Async x) = x let unit a = Async (fun (cont, _) -> cont a) let bind m k = Async (fun (cont, econt) -> let c = fun a -> try app (k a) (cont, econt) with exn -> econt exn app m (c, econt)) let catch p = Async (fun (cont, _) -> app p (cont << Choice2_1, cont << Choice2_2)) let start p = app p ((fun () -> ()), (fun exn -> raise exn)) type Async<'a> with static member Run p = let res = ref None // val res : Choice<'a, exn> option ref let cont = fun r -> res := Some r; unit () start (bind (catch p) cont) match Option.get !res with | Choice2_1 a -> a | Choice2_2 exn -> raise exn これでAsync.Spawn, Async.Parallelまで挑戦するのは無理ぽ。(´・ω・`)
159 名前:デフォルトの名無しさん [2007/11/22(木) 12:12:02 ] 1.9.3.6リリース
160 名前:デフォルトの名無しさん [2007/11/22(木) 23:56:53 ] >153-154 図星だったようだね。
161 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:06:19 ] ?
162 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 01:28:54 ] 政治的な理由で図が必要なら、Executable UMLでも 使ってれば? あと>>155 が答え。
163 名前:名無しさん♯ mailto:sage [2007/11/23(金) 12:20:33 ] CPSだとアピールするよう、>>158 のstartをプチ改良。w let id x = x let start p = app p (id, (fun exn -> raise exn))
164 名前:名無しさん♯ mailto:sage [2007/11/23(金) 17:12:31 ] これはすばらしすぎるwww ttp://channel9.msdn.com/Showpost.aspx?postid=358968 コメント欄もなかなか熱い。(;^ω^)
165 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:29:29 ] もうちょっとHaskellよりなOCamlがいいと思う
166 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:46:59 ] OCamlは副作用に対して寛大で、保守性や開発効率を保ったまま言語仕様を定めるのが忙しくて 165の様な要望に対しては手一杯
167 名前:名無しさん♯ mailto:sage [2007/11/27(火) 22:37:56 ] F#のオブジェクト機能をちょっとまじめに使ってみますた。( ゚д゚) ttp://cid-c42499cb3a347006.skydrive.live.com/self.aspx/Public/DLRSample.fs
168 名前:デフォルトの名無しさん [2007/11/28(水) 01:53:52 ] 日本語の解説はないの? htmlは読みにくいからpdfのドキュメントはないの?
169 名前:名無しさん♯ mailto:sage [2007/11/28(水) 17:21:32 ] 両方ともにすばらしい。(´ー`) (.ppt注意) ttp://qcon.infoq.com/sanfrancisco/file?path=/QConSF2007/slides/public/ErikMeijer_LINQIntro.ppt ttp://qcon.infoq.com/sanfrancisco/file?path=/QConSF2007/slides/public/ErikMeijer_Confessions.ppt モナドの観点では、LINQの標準クエリ演算子で最重要なのは実は SelectMany なのね。 >>168 日本語の解説は見たことないです。 英語のなら最近すごくいい入門記事が出ましたが・・・。 ttp://tomasp.net/articles/fsharp-i-introduction/article.pdf
170 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 21:07:15 ] >>169 モンドリアン風なのが気に入ったw
171 名前:デフォルトの名無しさん [2007/11/29(木) 01:54:58 ] F#がC#より優れている点ってあるの? すべてにおいてC#が優っているように思えるのだが。
172 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 02:04:46 ] んじゃC#使えばいいじゃにあか
173 名前:デフォルトの名無しさん [2007/11/29(木) 02:06:18 ] そうだけど何かメリットがあるならF#を使ってみようかと思って。 無いなら使わないけど。
174 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 04:51:48 ] F#とC#は使い所が違うんじゃないかな
175 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 05:38:33 ] (::)が関数として使えないんだけどそういうもん?
176 名前:デフォルトの名無しさん [2007/11/29(木) 20:23:52 ] F#の機能とかっていずれC#も取り込みそうな気がする。C#って何気に巨大言語だよね。
177 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 20:49:05 ] へじたんの夢の固まりだからな
178 名前:デフォルトの名無しさん [2007/11/29(木) 21:22:37 ] C#でできることすべてはF#でできない。 F#でできることすべてはC#でできる。
179 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 01:29:16 ] 逆だろ
180 名前:デフォルトの名無しさん [2007/11/30(金) 01:30:02 ] 逆じゃない。
181 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 01:41:23 ] C#、F#でできることの集合をそのままC#、F#と書く 1行目から C# ∩ F# = φ 2行目から F# ⊆ C# ∴F# = φ アッー
182 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 01:45:50 ] aho
183 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 01:52:06 ] (C#でできることすべて)はF#でできない。 ではなく C#でできることにはF#でできないことがある。 という意味なのか
184 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 01:59:02 ] 仕様書でこういうどちらとも取れる言葉遣いをしていたら揉め事の種になるな
185 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 02:00:23 ] F#使ったことないけど、 C#では var f = i=>i で型推論が働かず、コンパイルが通らない。 F#ではできる!(=F#でしかできない事) という認識で良いでしょうか?
186 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 09:14:42 ] 開発はなに使ってますか?VS2008?
187 名前:名無しさん♯ mailto:sage [2007/11/30(金) 10:30:03 ] 気がつけば、F# 1.9.3.7にマイナーアップデート。 ttp://research.microsoft.com/research/downloads/Details/e8478d6b-49c0-4750-80eb-0e424d1631a3/Details.aspx そして待望のこれ。F#との相性よろし。(´ー`) ttp://www.microsoft.com/downloads/details.aspx?FamilyID=e848dc1d-5be3-4941-8705-024bc7f180ba&DisplayLang=en 改めてこちらにも注目。 ttp://research.microsoft.com/research/downloads/Details/f9d6994e-45f6-49b8-b3c9-2a44bb2a4c50/Details.aspx
188 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 10:50:05 ] C#で航海関数(なぜか変換できない)かけるのかとこ一時間
189 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 10:58:20 ] ハァ?
190 名前:名無しさん♯ mailto:sage [2007/11/30(金) 18:05:31 ] System.Linq.ParallelEnumerable System.Linq.Parallel.Enumerable まぎらわしい・・・。(´・ω・`) 前者はIParallelEnumerable用、後者はIEnumerable用。
191 名前:名無しさん♯ mailto:sage [2007/11/30(金) 19:00:00 ] ParallelEnumerableに、ForAllなんていうAction系の拡張メソッドが。 オリジナルのEnumerableにもこれ付けてほしかったのに。(つД`)
192 名前:名無しさん♯ mailto:sage [2007/11/30(金) 19:36:06 ] Parallel.Aggregateはどこへ行った?と思ったら、 Parallel.For<TLocal> Parallel.ForEach<TSource, TLocal> がその代わりらしい。でも、使い方がちょっとわかりにくい・・・。(´・ω・`)
193 名前:名無しさん♯ mailto:sage [2007/11/30(金) 20:05:28 ] >>191 のForAllは、inverted enumerationというやつだった。 ForEachのつもりで使うと、順番がバラバラで困ったことになる。 MSDN Magazineできちんと解説してた内容をすっかり忘れてた・・・。orz ttp://msdn.microsoft.com/msdnmag/issues/07/10/PLINQ/default.aspx
194 名前:デフォルトの名無しさん [2007/11/30(金) 23:25:34 ] research.microsoft.com/research/downloads/Details/e8478d6b-49c0-4750-80eb-0e424d1631a3/Details.aspx www.microsoft.com/downloads/details.aspx?FamilyID=e848dc1d-5be3-4941-8705-024bc7f180ba&DisplayLang=en research.microsoft.com/research/downloads/Details/f9d6994e-45f6-49b8-b3c9-2a44bb2a4c50/Details.aspx
195 名前:名無しさん♯ mailto:sage [2007/12/01(土) 00:16:49 ] SEQUENTIAL_THRESHOLDがからむと、チューニング(値決め)がむずかしそうですのう。(´・ω・`)
196 名前:名無しさん♯ mailto:sage [2007/12/01(土) 13:20:31 ] TPLむずかし杉ワロタw #r "System.Core.dll"; #r "System.Threading.dll"; #light open System open System.Linq open System.Threading open Int32 let _ = let sum = ref (to_int64 0) do Parallel.For(0, 1000000, new Func<_>(fun _ -> !sum), new Action<_,ParallelState<_>>(fun i st -> st.ThreadLocalState <- st.ThreadLocalState + (to_int64 (i + 1))), new Action<_>(fun localSum -> Interlocked.Add (sum, localSum) |> ignore)) Console.WriteLine("TPL : {0}", !sum) let _ = let seq = ParallelEnumerable.Range(1, 1000000) ParallelEnumerable.Aggregate(seq, to_int64 0, new Func<_,_,_>(fun sum i -> sum + (to_int64 i))) |> fun sum -> Console.WriteLine("PLinq : {0}", sum)
197 名前:名無しさん♯ mailto:sage [2007/12/02(日) 01:01:31 ] dual coreでのパフォーマンスアップは1.5〜1.6倍といったところでしょうか。 quadで動かしてみたいのう。(´・ω・`)
198 名前:名無しさん♯ mailto:sage [2007/12/02(日) 23:54:31 ] F#じゃないけど、こんなのを取りまとめ中。 ttp://cid-c42499cb3a347006.skydrive.live.com/self.aspx/Public/LinqUtils.cs C#も十分関数的ですのう。(´・ω・`)
199 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 03:17:53 ] なんかむずむずする関数名だな。
200 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 04:41:19 ] >>198 ・Unitは確かにムズムズするな。unit 型と混乱しそう。 ・IsEmptyの実装は Enumerable.Count<T>使うより Enumerable.Any<T>使った方が良いんでは? Count使うと無限リストで死ねる。 てかAnyがあるからIsEmpty要らん気もするけど。個人的には。
201 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 09:10:48 ] C#もラムダ式で再帰を書く方法の改善と末尾再帰の最適化をやってくれるようになったら 関数型っぽく遊べるようになるんだがな。
202 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 09:14:32 ] その辺は棲み分けでしょ .net frameworkって糊を上手く使う所ってことで
203 名前:名無しさん♯ mailto:sage [2007/12/03(月) 10:49:17 ] >>200 コメント感謝です。 > ・Unitは確かにムズムズするな。unit 型と混乱しそう。 前は「Lift」って名前にしてたんですが、そっちの方がわかりやすいでしょうか? > ・IsEmptyの実装は Enumerable.Count<T>使うより > Enumerable.Any<T>使った方が良いんでは? Anyの使い方を知らなかっただけでつ。(´・ω:;.:... 勉強になりますのう。
204 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 11:17:49 ] >>203 個人的にはLiftで良いと思う。 ただ、.NET全般として見たときには Nullableのところで"Lift"を使っちゃってて面倒鴨。 ttp://msdn2.microsoft.com/en-us/library/system.linq.expressions.unaryexpression.islifted(VS.90).aspx monadがあればこの辺のメタな名前の衝突は回避できるというか統合できるのかのぅ。
205 名前:名無しさん♯ mailto:sage [2007/12/03(月) 11:29:57 ] >>204 修正しますた。ついでに使用例も。( ゚д゚)ノ ttp://cid-c42499cb3a347006.skydrive.live.com/self.aspx/Public/LinqUtilsDemo.cs > monadがあればこの辺のメタな名前の衝突は回避できるというか統合できるのかのぅ。 monoid派が「Unit, Bindにすべし!」と言い出す悪寒・・・。
206 名前:名無しさん♯ mailto:sage [2007/12/03(月) 23:16:44 ] うーん、結局のところ かなり必要 → ZipWith できれば必要 → Lift (T -> IEnumerable<T> のインターフェイスで) ぐらいで、他は別にイラネって感じかもしれん・・・。(´・ω・`)
207 名前:名無しさん♯ mailto:sage [2007/12/03(月) 23:35:51 ] Cycleは漏れ的にはお気に入りだけど、実際には使わんよなあ・・・。(;´Д`)
208 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 00:29:38 ] OCamlは糞言語だな。F#は大丈夫なんだろうな。
209 名前:名無しさん♯ mailto:sage [2007/12/04(火) 20:11:20 ] TPLは、TaskManagerPolicyを変えて、ParallelよりもConcurrentライブラリとして使えば便利かもしれん。 でもそれって何てjava.util.concurrent?(´・ω・`)
210 名前:デフォルトの名無しさん [2007/12/20(木) 02:46:46 ] Lisp系に比べるとML系って泥臭いというか、洗練されていない感じがする。頭悪そうな感じ。
211 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 08:06:21 ] でも得てしてそういう言語の方が広まったりしない?
212 名前:デフォルトの名無しさん [2007/12/21(金) 08:42:24 ] MLは普及してないだろ。
213 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:10:28 ] まさに目くそ鼻くそ
214 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 14:41:19 ] MS は # シリーズが Z までいったら, 次は $ シリーズを展開してくれると期待している.
215 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 23:44:56 ] M$
216 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 23:59:49 ] >>210 CL, Scheme, SML, OCaml なんかを比べているのであれば、 どれも大差無い様に見えるけど。歴史的に一番泥臭いのは CL だろうけど…