1 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 14:03:05 ] MSResearchから出てきた.NETで使える関数型言語のひとつF# OCAMLの流れを汲むこの言語、いろいろと面白そうなことができそう。 まだまだ英語の情報しかないこの言語について、幅広く語れ。 research.microsoft.com/fsharp/fsharp.aspx
299 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 01:17:34 ] Ocamlerってなんて読むの?おかむらー?
300 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 08:25:13 ] MinCamler? SML#ist?
301 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 10:44:49 ] >>299 オブジェクティブラクダ
302 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 14:26:15 ] OCaml 使いは 岡村 なのか・・・
303 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:59:55 ] だからOでオブジェクティブなんだよw Camlはフランス語でラクダ(キャメル)の意。 オブジェクティブキャメラー。
304 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:17:58 ] ラクダー
305 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 05:50:15 ] >Camlはフランス語でラクダ(キャメル)の意。 大嘘こいてんじゃねーよ
306 名前:デフォルトの名無しさん [2008/06/16(月) 08:30:41 ] C: Categorical A: Abstract M: Machine L: Language
307 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 14:44:39 ] >>305 低脳w
308 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 20:21:27 ] camlなんてフランス語ないよね 仮に camelのつもりだとしてもない
309 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 21:41:05 ] >>308 camlはフランス語にあるよw
310 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:35:11 ] つまらん
311 名前:デフォルトの名無しさん [2008/06/16(月) 23:53:02 ] >>309 ない
312 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:28:22 ] >>311 学習用の辞書に載ってないからってw
313 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:46:38 ] CAML = Cargo Aircraft Minelayer
314 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:13:44 ] そいうや随分前にも全角wで書き込む阿呆がいたな 日本もそういう季節になったの?
315 名前:デフォルトの名無しさん [2008/06/17(火) 05:12:02 ] フォントをメイリオにしてから全角、半角の区別がつかない
316 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 17:48:41 ] それだけMSゴシックが不メイリオだったってことか。
317 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 09:50:45 ] これってバグかな?マニュアルでは見つからない場合Not_found例外とあるが IndexOutOfBounds例外が出る 初心者なので判断がつかず・・ let msg s = System.Windows.Forms.MessageBox.Show s |> ignore in try let h = List.find ((<)100) [1..10] in printf "%A\r\n" h with e -> msg (e.ToString());;
318 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:13:30 ] F#のことは知らんOCamlの人だけど、printfでこけてんじゃないの?
319 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 07:12:14 ] んー、以下のコードでも試してみたけど、やはりIndexOutOfBounds例外でます ライブラリよりは俺のコードがバグってると思うんで どっかしょぼい所でミスってるんじゃないかと思うが・・ let msg s = System.Windows.Forms.MessageBox.Show s |> ignore in try List.find ((<)100) [1..10] |> ignore with e -> msg (e.ToString());;
320 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 07:56:45 ] 手元のF# Version 1.9.4.17だと、>>317 で Not_found(System.Collections.Generic.KeyNotFoundException)例外が出るので コードに問題はないはず この例外は、.NET Framework version 2.0で追加されたものなので、 Microsoft .NET Framework Version 2.0 Redistributable Package を入れれば直るんじゃない?
321 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 11:18:47 ] 検証ありがとうございます。 私の環境の問題のようですね F#のバージョンも1.9.3.14と少し古いので あわせてバージョンアップしてみますわ
322 名前:デフォルトの名無しさん [2008/06/29(日) 01:37:08 ] ちょwwまずはバージョン確認せいやw
323 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 21:03:36 ] >>317 Detailed Release Notes for F# 1.9.4 ttp://blogs.msdn.com/dsyme/archive/2008/05/02/full-release-notes-for-f-1-9-4.aspx > Not_found now maps to KeyNotFoundException not IndexOutOfRangeException.
324 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 20:09:07 ] F#はLinux上でも動きますか? コンパイルだけでもしたいのですが。。。
325 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 20:38:01 ] >>324 zipを展開すると install-mono.sh が入っているからこれで動くんじゃないのかね。
326 名前:デフォルトの名無しさん [2008/07/10(木) 01:28:11 ] InfoQ: F#の土台を越えて - 非同期ワークフロー www.infoq.com/jp/articles/pickering-fsharp-async
327 名前:デフォルトの名無しさん mailto:sage [2008/07/15(火) 12:14:54 ] ttp://blogs.msdn.com/dsyme/archive/2008/07/14/1-9-4-19-release.aspx 1.9.4.19 release
328 名前:デフォルトの名無しさん [2008/08/30(土) 07:27:00 ] Microsoft F#, September 2008 Community Technology Preview ttp://www.microsoft.com/downloads/details.aspx?FamilyID=61ad6924-93ad-48dc-8c67-60f7e7803d3c&DisplayLang=en 言語仕様からライブラリ構成まで、だいぶ変わったな
329 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 11:05:27 ] 非同期ワークフローとか、ParallelExtention,Scopeとかがどうかぶってどう統合されるのかがよくわからん(´・ω・`)
330 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 12:49:52 ] 知ってる言葉を並べてるだけだろ
331 名前:デフォルトの名無しさん [2008/08/30(土) 14:29:36 ] >>330 ぷっ 理解できないからって・・・w
332 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 18:29:51 ] >>330 ぷっ 理解できないからって・・・w
333 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 21:27:29 ] >>330 理解できないからぶってぶって・・・w
334 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 18:01:34 ] >>333 は?
335 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 18:06:01 ] >>333 は?
336 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 18:14:01 ] >>333 は?
337 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 00:19:39 ] 俺もぶってほしい(*´∀`*)
338 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 01:30:34 ] Detailed Release Notes for the F# September 2008 CTP release blogs.msdn.com/dsyme/archive/2008/08/29/detailed-release-notes-for-the-f-september-2008-ctp-release.aspx Microsoft F#, September 2008 Community Technology Preview www.microsoft.com/downloads/details.aspx?familyid=61ad6924-93ad-48dc-8c67-60f7e7803d3c&displaylang=en&tm F# 1.9.6.2
339 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 13:19:45 ] ブログネタとかでもだんだん見るようになってきたけど、 OCaml派生として使ってるやつばっかりだな OCaml知らない俺から見るとなんかぜんぜんF#っぽくないし、 そっち系は面白くならないと思うが。 .NETライブラリ使ってるやつとかあんまいないのかね
340 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 20:26:38 ] >>339 windows上の設置が簡単なocamlって扱いだからでないか? 人に渡すにしてもランタイムいらんし。
341 名前:デフォルトの名無しさん [2008/09/11(木) 11:17:55 ] CTPになって2008しかインストール出来なくなったのはいいけど、 前からあったサンプルプログラムがコンパイルできないよ。 CTP用のサンプルはDirectX関係がコンパイル出来ないし、 スレッド周りとか勉強したいんだけどなぁ。
342 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 15:40:17 ] .netライブラリなんて他と同じように使えばいいだろ
343 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 23:34:56 ] こうですか?わかりません をVB.NET風に書こうと思ったけどめんどくさかったのでやめた
344 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:44:32 ] #useってデバッグ用途とかでかなり便利だったのにな。 #loadじゃ関数とかアクセスできないし、 再起動してfsi --useも起動の時間がかかりすぎて代わりにならない。 復活してくれんかな。
345 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 13:14:30 ] .Net使ってるとWin32APIが使いたい場面が多々出てくるが 細かいところでわからんことが多い C#⇔F#コード対応表みたいなのがほしいわ フック書きてぇ
346 名前:デフォルトの名無しさん [2008/10/13(月) 09:33:20 ] F#で学ぶ関数型プログラミング入門 「関数型プログラミングの主な概念とF#での利用例」 codezine.jp/article/detail/3041
347 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 15:13:21 ] >>345 P/Invoke宣言だけはC#で書いてしまえばいいんでない?
348 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 16:01:48 ] ↓こんなのがC#側で定義出来るってこと? [<DllImport("user32.dll",EntryPoint="SetWindowsHookEx",SetLastError=true)>] let ... (たぶんdelegateキーワード使う)HOOKPROCの型がわからないので 実際そこでも詰まってるんだが、それがわかったとしても SetHookの返り値をIntPtr.Zeroとどうやって比較するのかとか わからない箇所あって、若干諦めてる ところでF#にはいわゆるbreakやcontinueはないんですかね for文の中でreturnするケースは手続き型の既存資産には多いと思うが F#に移植しようと思ったら再帰等でロジックを考え直す必要があるとすると 作業コストが高い break,last,return,continueなんかで言語仕様検索しても それらしいのは見つからんね
349 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 16:12:45 ] 自己レス。残念だけどなさそうだわ ttp://cs.hubfs.net/forums/thread/7118.aspx
350 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:17:02 ] >>348 移植コストを下げることに意味はない カエレ
351 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:27:22 ] アローつくれば、順次処理、条件分岐、繰り返しができるお
352 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:43:07 ] >>350 なぜ
353 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 09:33:33 ] 逆に、何でソースコードレベルで移植しようとか思うんだ? 対象環境に言語処理系が無いとかなら分かるけど、.NETだぞ? 普通、DLL作ってFFI経由で呼び出しするだろ。 なんだか、同じ言語で書くことにこだわりすぎてる気がするけど。
354 名前:デフォルトの名無しさん [2008/10/14(火) 22:37:30 ] >>345 そんな単純な置き換えができるのはVB⇔C#とかだけだろ F#は関数型言語で全然違うから、考えを変える必要があるかもしれない むしろC#とF#のコードの一対一対応表がつくれるくらい似てる言語なら、F#いらねーだろ。
355 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:44:09 ] そんなたいそうな理由があるわけじゃなくて、 単に楽したいと思ったんだが、気に障ったならすまない
356 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 09:36:44 ] >>355 関数型言語によるプログラミングスタイルの一種に breakやcontinueを使わずに制御構造をくっつけていくという一派がある。 それを調べてみると面白いと思うよ。 listモナドとかmaybeモナドとか>>351 の言ってるarrowとか。 ttp://d.hatena.ne.jp/r-west/20070720/1184946510 慣れるとむしろbreakやcontinueイラネになる。
357 名前:デフォルトの名無しさん [2008/10/15(水) 14:47:07 ] もしかして、今の新しいバージョンのF#って2008製品版もってないと 入れられなくないですか・・・?('A`) >>356 ほー、参考になる
358 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:36:17 ] 前のバージョンなら Express でも入れられたの? プラグインとか機能追加系は製品版じゃなきゃ基本無理。
359 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:56:25 ] よく調べもせず臆面なくそんなレスを…
360 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 20:30:58 ] そのための2ch
361 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:05:54 ] 356見て、出来たらF#でarrowを表現してみたいと思ったがさっぱりだ 関数a->bを渡すとarr a bが出来て、 arr a bの型に対する操作が色々あるんだろうと思うんだが arr a bの型に当たる物はf#ではどう表現すれば良いのか 'a 'b tみたいに複数のジェネリックな型を持つことになる? もしかしてHaskellのほうが抽象度が高いことができる?
362 名前:デフォルトの名無しさん [2008/10/16(木) 22:07:12 ] >>358 2008はもってないんだよね・・・うpでとするいい機会だ
363 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 07:35:28 ] >>361 higher kind genericsというやつで、F#の型システムでは再現は無理ぽ。(´・ω・`) F#もどきで書くと、こんな感じのものが必要。 Arrow<'arr<'a, 'b>>
364 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 19:13:35 ] なるほど、非常に参考になった。 Haskellは進んでるな
365 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 10:44:02 ] >>357 , >>358 , >>362 Visual Studio 2008 Shell (integrated mode) Service Pack 1 www.microsoft.com/downloads/details.aspx?FamilyID=2e9a8c35-eb3d-43eb-9122-a5ec195cd7bb&DisplayLang=ja
366 名前:デフォルトの名無しさん [2008/10/18(土) 16:24:25 ] >>365 Thanx。shell runtime入れりゃよかったのね
367 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 12:44:35 ] 手続き型べったりの人間には (|>) を多用すると評価順序がわからなくなって混乱するんだぜ >>123 とか let _ = List.iter ((|>) ()) (List.map ((delay >> flip) (printf "closure %d\n" )) [1..10]) とかけば (unit -> unit) unit が10回ってわかるんだが…
368 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 11:54:03 ] これでいいんじゃね? Seq.iter (fun n -> printf "closure %d\n" n) [1..10]
369 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 22:41:18 ] 素人です。Expert F#読んでてわからないことがあったので質問 type Attempt<'a> = unit -> 'a option let runAttempt (a:Attempt<'a>) = () |> a type AttemptBuilder() = member b.Return(x) = fun () -> Some x member b.Bind(p, rest) = match runAttempt p with None -> (fun () -> None) | Some x -> rest x member b.Let(p, rest) = rest p let attempt = new AttemptBuilder() let failIfBig n = attempt { if n>1000 then return! (fun () -> None) else return n } とあったとき、これ↓を de-sugar しろって問題なんだけど、 let sumIfBothSmall (i1, i2) = attempt { let sum = ref 0 let! n1 = failIfBig i1 do sum := sum.Value+n1 let! n2 = failIfBig i2 do sum := sum.Value+n2 return sum.Value } これ↓であってるかな? let sumIfBothSmall2 (i1, i2) = attempt.Let(ref 0, (fun sum -> attempt.Bind(failIfBig i1, (fun n1 -> attempt.Bind(attempt.Return(sum := sum.Value+n1), (fun () -> attempt.Bind(failIfBig i2, (fun n2 -> attempt.Bind(attempt.Return(sum := sum.Value+n2), (fun () -> attempt.Return sum.Value)))))))))) 見づらくて申し訳ない…
370 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:15:20 ] こうじゃない? let sumIfBothSmall2 (i1, i2) = attempt.Let(ref 0, (fun sum -> attempt.Bind(failIfBig i1, (fun n1 -> attempt.Let(sum := sum.Value+n1, (fun () -> attempt.Bind(failIfBig i2, (fun n2 -> attempt.Let(sum := sum.Value+n2, (fun () -> attempt.Return(sum.Value))))))))))) ここ見る限り blogs.msdn.com/dsyme/archive/2007/09/22/some-details-on-f-computation-expressions-aka-monadic-or-workflow-syntax.aspx
371 名前:369 mailto:sage [2008/11/15(土) 21:52:50 ] あーunit -> 'a option のコンテナってことか ようやく理解できたような ありがとう
372 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 10:37:08 ] C++のvectorみたいなコンテナってある? Microsoft.FSharp.Collections.ResizeArrayがそうかと思ったら、 Note: an abbreviation for List<'a>て書いてあたよ
373 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 12:58:16 ] ResizeArray でいいんじゃないのん? Microsoft.FSharp.Collections.List<'a> と System.Collections.Generic.List<'a> は別物 ttp://research.microsoft.com/fsharp/manual/FSharp.Core/Microsoft.FSharp.Collections.html
374 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 09:16:40 ] ああ、Listって名前だから勘違いしたけどインデックスアクセスはO(1)なんだな
375 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 21:53:44 ] System.Windows.Forms.dllを参照したいんですが、.NETのVersion3.5には見つかりませんでした。 フォームを表示するアプリケーションを作る場合、現状では.NET Version2のSystem.Windows.Forms.dll を参照するしかないんでしょうか?
376 名前:375 mailto:sage [2008/11/29(土) 22:24:55 ] 自己解決しました。 アセンブリ System.Windows.Forms .NET Framework 3.5, .NET Framework 3.0, .NET Framework 2.0 のメンバ C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll と書いてあったので、今の設定で良さそうです。
377 名前:デフォルトの名無しさん [2008/12/05(金) 18:55:21 ] 今、日本がピンチです。 messages.yahoo.co.jp/bbs?.mm=GN&action=5&board=552022058&tid=cf9qa4nhbfffca5ga5b&sid=552022058&mid=83344 sora1975.blog88.fc2.com/blog-entry-144.html リンク先を見て危機を感じるなら、コピペを貼ってください。
378 名前:デフォルトの名無しさん [2008/12/11(木) 20:42:09 ] Foundation of F#の92ページのサンプルってビルド失敗しないか? IEnumerable.iterで怒られる。iterなんてねーよって。
379 名前:デフォルトの名無しさん [2008/12/11(木) 20:46:53 ] Seqにしたら動いた。。
380 名前:デフォルトの名無しさん [2008/12/12(金) 19:54:50 ] F#の時代がクル━━━━━━(゚∀゚)━━━━━━ !! 正式発表:Visual Studio 2010がF#でシップ予定 - InfoQ www.infoq.com/jp/news/2008/12/FSharp-Release
381 名前:デフォルトの名無しさん [2008/12/12(金) 20:01:17 ] WindowsではC++は消え行く運命か?
382 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 20:23:12 ] 何でそう思ったのか知らんけど、当面は残るから心配する必要は無い。 まぁでも、Windows向けに開発するなら.NETにも触れといた方がいいとは思う。
383 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 21:48:11 ] >>380 機能プログラミングって・・・w
384 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 22:14:33 ] F#はOCamlのコード書くために使うわ
385 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 10:57:24 ] >J#と全く同様の方法で、 ざわ… ざわ…
386 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 00:41:54 ] >>384 let 〜 andができないのこまらね?
387 名前:デフォルトの名無しさん [2008/12/27(土) 06:37:35 ] 今後MFC使う場面ってあるの?
388 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 12:34:30 ] 質問です。 ExpertF#に以下のクラス定義があります。 type Vector2D(dx: float, dy: float) = let len = sqrt(dx * dx + dy * dy) member v.DX = dx member v.DY = dy member v.Length = len member v.Scale(k) = Vector2D(k*dx, k*dy) member v.ShiftX(x) = Vector2D(dx=x+dx, dy=dy) (* @ *) member v.ShiftY(y) = Vector2D(dx=dx, dy=y+dy) (* A *) @とAのところで引数を指定するのにdx=x+dxのようにしてい ますが普通にx+dxではいけないのでしょうか?こちらでも 同じように動作しました。dx=x+dxの方法には他に意味が あるのでしょうか?
389 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 13:28:37 ] 名前指定してるから引数の順番入れ替えても許されるとかそういう利便性の話では
390 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 14:29:25 ] >>389 レスどうもです。 やってみました。確かにそういう利便性がありました。 ありがとうございました。
391 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 18:52:50 ] >>380 VSでは単独での使用が想定されてないとか アプリケーションのコアを構築するためとか どういう意味なのかね。想定場面がよくわからん だいたいC#VBからF#の関数呼ぶのも一苦労なんだけど。 VSなしじゃ使い物にならなくなるってことかな CLR上のLL的ポジションでいて欲しかったんだけどなあ
392 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 22:58:56 ] >>391 F# にはデザイナ ツールが含まれない。 つまり、WinForm やら ASP.NET Page やらをポトペタで開発できない。 ついでにいえば型付きデータ セットも、やるならコードごりごり書くしかない。 やるならやればいいけど。やりたい?それ?やりたくないよね? じゃそういう部分は C#/VB.NET に任せて、他のコアな部分を F# で書くといいよ。 の意。 >>386 ふつうに書けるけど。なんか別の意味か? let rec even n = if n = 0 then true else odd (n - 1) and odd n = if n = 0 then false else even (n - 1)
393 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 07:09:17 ] >>392 ペタペタできないのか じゃあ覚える意味あんまりないか
394 名前:392 mailto:sage [2008/12/29(月) 21:39:23 ] あー。 念のため言っとくと「F# にはデザイナ ツールが含まれない」てのは VS2010 での話ね。 その次の VS とか、あるいは SP とかで、いずれは提供されるようになるものと思われ。 まあ、だとしても何年後だよって話だが。
395 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 21:48:45 ] その次の VS とか、あるいは SP とかで、F#がなくなる可能性・・・
396 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 00:05:38 ] .net自体物凄い歴史浅いのに、普遍化しとるねぇ
397 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 01:21:32 ] >>393 ごめんこれ釣りなのかどうかわからなくなってきたw
398 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 01:39:42 ] F#って型推論のせいでVSのインテリセンスの恩恵とかほとんどなさそうだな
399 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 01:40:25 ] >>392 ごめんこれ釣りなのかどうかわからなくなってきたw
400 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 02:53:51 ] >>392 普通にかけないんだけどなにが普通なんだ? let x = 2 and y = 1;; どういう仕様なんだと思ったけどandの前に改行がいるんだな
401 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 21:03:52 ] 天才ども教えてくれ let f a b c = match a, b, c with | Some a, Some b, Some c -> Some (a, b, c) | _ -> None と定義して、以下を実行すると value restriction と言われて結果が None に ならない。 f (Some 3) None (Some 1.5) 分かる人いる? そもそもvalue restrictionとは何なのか。
402 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:53:07 ] >>401 天才じゃないが答えてみる 関数 f の型は val f : 'a option -> 'b option -> 'c option -> ('a * 'b * 'c) option になるわけだけど f (Some 3) None (Some 1.5) という式を評価しても 'b の型は最後まで確定しないわな それはよろしくない(→というのが超大雑把な value restriction の説明) つまり 'b の型を明らかにすれば error を消せる 簡単には適当な型注釈をつけてやれば OK で f (Some 3) (None : int) (Some 1.5) とか、あるいは (f (Some 3) None (Some 1.5) : (int * int * float) option) とかすればよい しかし通常は文脈から 'b が具体的な型に決まることが多い if true then f (Some 3) None (Some 1.5) else f None (Some 1) None だもんで型注釈に頼るような場面は少ないように思われる
403 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 03:16:50 ] >>402 なるほど。理解できた。 (None : int)は(None : int option)の誤記だと 思うけど後者でうまくいった。全体に型注釈 をつけても良いんだね。thx。
404 名前:デフォルトの名無しさん [2009/01/17(土) 14:45:28 ] age
405 名前:デフォルトの名無しさん [2009/01/23(金) 17:21:26 ] もうだめぽ
406 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 17:52:20 ] とりあえず、Ocamlの開発環境について教えてください。 ライブラリの管理などを含めてノウハウを教えてください。 エディタはこれを使えとか、コンパイルするときはこうしろとか、成果物を配布するときはこうしろとか、 そういう諸々のプログラミング周辺の雑務について知りたいです。
407 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 22:54:46 ] 関数型が難しいとかわからんとか言ってるヤツってなんなの? けっこう他の言語はバリバリ使いこなしてるヤツに限ってそういうこと言う なんかコードも書いてないのにわかんね言ってるように見えるんだけど Web でかるーく拾いあさった断片的な知識並べてわかんない言われてもねえ ほなたとえば OOP べんきょーするときもそんなやり方でやったんかと 『やさしい Java』読んだだけで Java できますゆー人間信用すんのかと 実践皆無の人間が OOP 知ってますゆーのを見てなんとも思わんのかと もうね、自分の知らん新しいテクノロジ排除したいだけのオッサンちゃうんかと プログラマ名乗るんならまずやってみろよと 知りたいのなら知る努力をしてみせろよと その上でどこがどーゆー風にわからんのか言えと
408 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 22:57:09 ] 難易度はともかく関数型は実用性が低いから困るんだよ
409 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 22:57:51 ] F# イラネ C# でイイじゃんゆうヤツには 精々逃げ切れるようにがんばれよと言っておきたい
410 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 23:08:58 ] >>408 言いたいことはわからないでもない でも F# に限っていうなら使い分ければいいんでないの? 関数型と命令型と OOP と
411 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 13:50:33 ] アルゴリズムらしいアルゴリズムを自分で考えて(選択して)実装することなく、 APIを順に呼んでエラーチェックだけするようなプログラムばっか 書いている(書かされている)人には、勉強しようというモチベーションなど 湧かんだろうなー。
412 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 22:26:24 ] やぁ、関数型言語っぽいノリになってきましたね
413 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 23:08:23 ] >>411 職業プログラマの多くがそれに該当するのではないかと想像するが それが仕事なんだから許してやってくれ 職業プログラマの世界では、そもそも「車輪の再生産」は悪とされている 自分でコードを書かなければ工数が減るしバグをつくりこむ機会もなくなるからな
414 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 23:09:59 ] うちのところはよく使うものも全然共通化してくれないんだけど・・・
415 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 23:28:05 ] 世の中の「プログラマ」と名乗る人の結構な割合は関数型言語はおろか、 自力でtreeのトラバース程度もやる必要に迫られたことも無く、 2分探査のコードを書けと言われてバグ無く書けないこと位、みんな判ってるさ。 そして、F#を勉強する俺出世確実、とか思ってるやつもきっといない。
416 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 00:08:16 ] 自分でアルゴリズムを考えるのが楽しいんだよ。それはもちろん。 でも他人がもう作っちゃったプログラムを同じように作ったってしょうがないだろ。 その労力を新しいものを作る事に傾けたほうが効率的だし、 自分が作るということは作ったものに責任を取るということなんだから、 そんな余計な事まで首突っ込んで余計な責任を取ることも無いだろ。
417 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 00:27:17 ] コレクションになんか突っ込んダリするだけですめばいいが、そこに永続化とか色んなフィーチャーを盛り込もうとすれば何処かの段階で全てを自分で作った方がきれいにまとまる段階が来ると思うがどうよ。 もちろん既存のオープンソースなどを使った方がいいのもわかるが、その仕様を自分の要望に合わせる時に無理があることも多いから。 自分で作るのも追っついてるうちはいいが本当に全てを作るわけにもいかずどこまで突き詰め、どこで妥協するのか考える毎日だが。
418 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:11:53 ] そうなんだよなー 出来合いの API とかじゃ "想定された使い方" しかできん罠 なんかインジェクションしたいってなったらもう自分で組むっきゃないわけで そんなときにクラスじゃ粒度がデカすぎるって場合も多いんだよね はばからずに高階のノリでイケるってホント楽(柔軟)でいい
419 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:09:39 ] >>413 > 職業プログラマの世界では、そもそも「車輪の再生産」は悪とされている むしろどんどん再生産して儲けてくださいそれが職業プログラマの本分です
420 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:16:29 ] 再生産で儲けるのは三流 俺 一流だから そんなこと しない
421 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 03:02:26 ] >>420 「再生産」で儲けることのなにが三流なのか、答えてもらおうじゃないかw
422 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 12:02:30 ] 儲けて旨い飯が食えりゃどっちでもいいじゃないか。
423 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 12:13:33 ] 一流は金に困ってなんかいないから、儲けることなんか二の次に考えて新しいことを追い続けられる。
424 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 12:34:51 ] 何で一流の奴がこんなとこで一流だの三流だのしょうもない議論やってんだよw 俺にできないような、新しい事を追い続けてくれよww 続きはマ板で
425 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:09:42 ] >>419 は皮肉 ×車輪の再生産 ○車輪の再発明
426 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 11:05:47 ] 糞スレ
427 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:47:23 ] 関数を表す型を定義して、定数関数を定義しようとしたのですが 型からは関数とわかっていても、関数のようには呼び出せませんでした。 以下のようなことを実現するのは難しいのでしょうか? type FUNC<'arg1,'result> = F of ('arg1 -> 'result);; F ((+)1);; //使用例1 F (+);; //使用例2 //ここでエラー let apply1 (f:FUNC<int,int>) = f 1;; //apply1 ((+)1)、などとしたい 欲を言えば、FUNC型からarg1やresultの型を取り出すような プログラムも書きたい・・
428 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 00:47:21 ] 型と関数を混同してるような というか、なんかいろいろ勘違いしてそうに見える > apply1 ((+)1)、などとしたい で、一体なにをしたいの?その式を評価して得るものはなに? まずはその式の「型」を教えてくれないとなんともアドバイスできない いちおーエスパーしとくとこんなんか? let apply1 f x = f x let f = apply1 ((+) 1) f 2 // val it : int = 3 もしなにか Union Types を使わにゃならんような 理由があるんだったなら教えてほしい
429 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 02:00:06 ] ご回答ありがとうございます。 おっしゃるとおり、自分でもたぶん型と関数の違いがあまりわかってないと思います^^; 上の質問をした経緯です 最終的にやりたいことは、let recを用いずにYコンビネータを書きたい しかし、F#では、次のような呼び出しは型情報が∞ループして決定できない let fact self n = if n=1 then 1 else n * ((self self) (n-1)) in fact fact 10;; そこで、まずは、再帰的なデータ型を定義して用い、上記のような呼び出しを通るようにしたい (再帰的に'aを'a->'bに置き換えるような型) しかし、再帰的なデータ型とか、あまりプログラミング経験がないので 型情報を扱うプログラムからまず取り組むことにしたが、つまづいた、とう状況です 上のプログラムですが、次のようにするとコンパイルは通ります。 let apply1 f:FUNC<int,int> = f 1;; val apply1 : (int -> FUNC<int,int>) -> FUNC<int,int> しかし、自分が求めた型は val apply1 : FUNC<int,int> -> int なのですが、なぜこうなるのかはさっぱりわかってません
430 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 08:51:24 ] MLでYコンビネータを書く話なら、↓の最後にコードが載ってる 私には内容がさっぱり理解できないので、参考になるかどうかは分からんが ttp://www.kurims.kyoto-u.ac.jp/~hassei/selfref2006.pdf
431 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 09:55:54 ] >>427 は、↓にすればコンパイルが通るぞ let apply1 = function (F f) -> f 1;;
432 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 11:15:40 ] あっと、別にfunction使う必要はなかった let apply1 (F f) = f 1;;
433 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 13:03:49 ] >>430 ,431 ありがとう。とても参考になりました。 let recは言語組み込みのYコンビネータみたいなもんらしいですね 無事できあがったYコンビネータ type X = Psi_inv of (X -> (int -> int));; let psi (Psi_inv f) = f;; let Y g = let h y = g(fun x -> (((psi y) y) x)) in h(Psi_inv(h));; (Y (fun f x -> if x=0 then 1 else x * f(x - 1))) 10;; しかし、単純にF#に翻訳しただけなので 理解したとは言い難い・・
434 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 18:21:09 ] この流れなら書ける type fix<'a, 'b> = Fix of (fix<'a, 'b> -> ('a -> 'b)) let y f = (fun (Fix g as h) x -> f (g h) x) (Fix (fun (Fix g as h) x -> f (g h) x)) y (fun f x -> if x = 1 then 1 else x * f (x-1)) 5 // val it : int = 120 [1..10] |> List.map (y (fun f x -> if x <= 2 then 1 else f (x-1) + f (x-2))) // val it : int list = [1; 1; 2; 3; 5; 8; 13; 21; 34; 55]
435 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 20:43:02 ] 同じ結論にたどり着いた type Rec<'a,'b> = R of (Rec<'a,'b> -> ('a -> 'b));; //version1 let y f = let ymaker (R proc) = f(fun arg -> (proc (R proc)) arg) in ymaker (R ymaker);; //version1 extract let y f = (fun (R proc) -> f(fun arg -> (proc (R proc)) arg)) (R (fun (R proc) -> f(fun arg -> (proc (R proc)) arg)) );; //version 2 let R_inv (R f) = f;; let y f = let ymaker proc = f(fun arg -> (((R_inv proc) proc) arg)) in ymaker (R ymaker);; //version 2 extract let y f = (fun proc -> f(fun arg -> (((R_inv proc) proc) arg))) (R (fun proc -> f(fun arg -> (((R_inv proc) proc) arg))) );;
436 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 07:30:35 ] Programming F#: Rough Cuts Version By Chris Smith Rough Cuts Release: February 2009 Print Book Release: October 2009 Pages: 504 俺、この本が出たらF#はじめるんだ・・・
437 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 02:31:18 ] のーみそが関数型に染まってくると 「左辺値」「右辺値」という言葉に 妙な違和感を覚えだす そもそもそんな観念がないというか あえて言うなら左辺に値などない てなことを妄想してみたけどどうよ?
438 名前:デフォルトの名無しさん [2009/02/11(水) 04:31:13 ] >>437 概念じゃねーの?
439 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 08:56:56 ] >>434-435 lazyに考えれば、もっとシンプルに書けるんじゃね(´・ω・`)? let rec fix (f : Lazy<_>) = f.Force() (lazy fix f) let fact = fix <| lazy fun f x -> if x = 0 then 1 else x * f.Force() (x - 1) do fact 5 |> printfn "%d"
440 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 09:01:08 ] >>437 「let x = 1」 これは等式とは思わない方が自然じゃないだろうか。 もともとは数学の論文とかでよく出てくる 「Let x := 1.(xを1と置く。)」とかいう表記を構文にしただけなんじゃないかと想像する。 等式じゃないなら、左辺、右辺とかいう観念はない。
441 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 09:18:39 ] おまえら頭いい サイコーだ
442 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 12:21:03 ] >>439 >>429 をよく見ろ > 最終的にやりたいことは、let recを用いずにYコンビネータを書きたい
443 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 12:55:37 ] ついでに、let rec 使用可なら lazy を使う必要すらない let rec fix f x = f (fix f) x let fact = fix <| fun f x -> if x = 0 then 1 else x * f (x - 1)
444 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 13:39:14 ] >>443 > let rec fix f x = f (fix f) x あー、そっか。x つければ落ちないんだ。(´・ω・`) let rec fix f = f (fix f) と書いて、StackOverflowになってたのでlazyにしてた。
445 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 13:47:41 ] x はラムダ的に冗長に見えるけど、型推論の重要な手がかりになってるということか。 > let rec fix f = f (fix f);; val fix : ('a -> 'a) -> 'a > let rec fix f x = f (fix f) x;; val fix : (('a -> 'b) -> 'a -> 'b) -> 'a -> 'b
446 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:01:31 ] そのあたりのことってProgramming in OCamlに書いてある 正格評価がどうのこうので。 試してないが、確かこれでもいけたはず let rec y f = f (fun x -> y f x);; fun arg -> (proc (R proc)) argの箇所を (proc (R proc))としないのも同じ理由だと思う とりあえずfunで包めばOK,みたいな
447 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:31:19 ] 結局、再帰型を使うようにしたら、結論はほとんど同じだった。(´・ω・`) type Fix<'a, 'b> = Fix of (Fix<'a, 'b> -> 'a -> 'b) let run_fix (Fix f) = f let ycomb f = let g proc = f (fun arg -> run_fix proc proc arg) in g (Fix g) let fact = ycomb <| fun f n -> if n = 0 then 1 else n * f (n - 1)
448 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:42:02 ] >>438 正直、「観念」と「概念」の違いがわからんで調べてきた どちらも「モノコトに対する意識・考え」だが… * 観念 英語でいう idea の意味に近い オレオレ解釈的(主観的) 故に観念は多様である * 概念 英語でいう concept の意味に近い ふつうはみんなそう解釈するよねー的(客観的) 故に概念は一様である という違いがあるようだ。 左辺値、右辺値という考え方は、一般に共通の理解を得ている もの(通念)であり、それらは「概念」と呼ぶのが相応しい ということかな?
449 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:45:18 ] >>448 まあニュアンスが伝わればいいんじゃね?
450 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 07:21:21 ] >>445 冗長なんじゃなくて、正格評価の世界では意味が全く別のものになる。 let rec fix = fun f -> f (fix f) let rec fix = fun f -> fun x -> f (fix f) x 後者では x が遅延の役割をしてくれる。 Haskellのような遅延評価の世界では、確かに冗長なだけ。
451 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 07:31:11 ] f そのものを遅延化してしまう(>>439 )のと、 引数 x を追加して遅延の役割をしてもらう(>>443 )のと、 どちらがコードの見た目的にやさしいかは明らか。w
452 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 07:47:47 ] f (fix f) と fun x -> f (fix f) x って同義じゃないの? んー、マジで分からん
453 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 19:50:03 ] let rec fix f = f (fix f) だと、f が渡された途端、 f (fix f) ↓ f (f (fix f)) ↓ f (f (f (fix f))) ↓ f (f (f (f (fix f)))) ↓ f (f (f (f (f (fix f))))) ↓ あぼーん 関数を返そうとはするが、fix を展開しようとして無限ループ。 let rec fix f = fun x -> f (fix f) x だと、f が渡されても、 fun x -> f (fix f) x x が渡されるまで fix は展開されない。
454 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 19:54:11 ] ちょっと言葉足らずなので修正。 × 関数を返そうとはするが、fix を展開しようとして無限ループ。 ○ 関数を返そうとはするが、先に fix を展開してしまい無限ループ。 × x が渡されるまで fix は展開されない。 ○ 先に関数を返し、x が渡されるまで fix は展開されない。
455 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 17:13:10 ] 関数は first-class object ではあっても 関数 = 値 ではない、と ――ここで正格評価において let rec fix f = f (fix f) なる定義で fix g を評価しようとしたら? 必死こいて値を算出しようとしてしまうんだな で、その結果、>>453 が示すように無限ループに陥る let rec fix f x = f (fix f) x なる定義で fix g を評価しようとしたら? これは部分適用だから関数オブジェクトの生成を行うのだな で、後々、(fix g) y とされたときに値の算出が始まる
456 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 23:01:31 ] 高尚な議論の最中で流れぶった切ってゴメン 入れ子になった型宣言(ネストされた type)って無理? type a () = type b = {x : int; y : int;} ... とかすると、2つ目の type で Unexpected keyword 'type' in type definition と怒られる
457 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 20:14:16 ] >>456 できなさげ 確かに C# ではインナー クラスできるけど Java と違ってそんなに多用されるもんでもないような てか例示のコードならタプルでいいんじゃ?
458 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 22:01:21 ] ありがと、やっぱ出来なさそうですね。 まぁ、確かにタプルでも機能するんですが、 各要素へのアクセスが面倒なんで レコードの方が扱いやすいなぁと。
459 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 01:02:15 ] .NET 言語なんで C# 基準で考えてしまいがちだが F# は OCaml ベースなんだぜ? internal すらぬるい、どうしても外部から隠蔽したいというなら シグネチャ(.fsi)ファイルを書けばいいじゃないか と、眠たいので調べもせずにいってみるテスト
460 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 12:53:16 ] >>259 公開するものだけをシグネチャ ファイルにしたら上手くいった。 なるほど、fsi はこうやって使うのか。 改めて読み直してみたら本には書かれていたけど、 いままで自分には無関係だと思って無視してた。 もうちょっと調べてみる。 じつは OCaml は見たことも触ったこともないんだけど、 やっぱ一通り触れてみた方がいいのかな・・・
461 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 20:18:22 ] >>259 言い忘れてた ありがと
462 名前:デフォルトの名無しさん mailto:age [2009/03/04(水) 22:31:36 ] seq<int> 型に拡張メソッドを加えたいです。 パラメータを int 型に制約しなければ例えば次のように出来ました。 type System.Collections.Generic.IEnumerable with member this.H = Seq.hd this これを seq<int> 型の時のみ拡張することは出来ないのでしょうか。
463 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 03:49:18 ] これってVisual Studioから使えるの?
464 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 04:09:35 ] つかえるよ。 男は度胸。ものは試し。 まずはインストールしてミソ。
465 名前:デフォルトの名無しさん [2009/03/07(土) 09:32:33 ] 2008のProでしか駄目でした的な感じなのだが・・・orz 2008 Pro安く売ってないのかね
466 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 13:05:24 ] エディション比較ちゃんと見れと www.microsoft.com/japan/msdn/vstudio/products/vs08/compare.aspx 相変わらず Visual Studio 2008 Shell は知られてないなと msdn.microsoft.com/ja-jp/vsx2008/products/bb933751.aspx アドインなんだから devenv.exe のあるなしで判断できるだろうと
467 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 17:19:53 ] 使ってる人もっとなんか書いてくれ Scala がどうとか言ってる同僚を黙らせたい …俺? 日本語の本が出てからやるわw
468 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 23:49:03 ] F# のことを勉強しようかと思ったが、至るところ null があるって聞いた時点で、萎えた。
469 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 23:56:45 ] 何を言ってるんだ?おまえは?
470 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:07:37 ] >>467 どうとか言ってる内容にもよるわけだが、黙らせる方法ってのは。 関数型サイコーとでも言っているのかい?その同僚は。
471 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 02:04:51 ] nullがあるって変な表現だよね。
472 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:24:28 ] >>466 kwsk 2008 StdあればF#の拡張機能は組み込めるってこと? あと、VS2008 の Shell 版なら本体買う必要なすってことなのかな?
473 名前:472 mailto:sage [2009/03/08(日) 15:31:46 ] ごめん、検索したら一杯情報出てきた。 大体あってた。 いげ太のブログ: Microsoft Visual Studio 2008 Shell (integrated mode) で F# 無償開発環境 igeta.cocolog-nifty.com/blog/2008/04/vsshell.html > Microsoft Visual Studio 2008 Shell (integrated mode) を導入すれば、 > 無償の F# 開発環境が手に入る。噛み砕いて言えば、C# も VB.NET も C++/CLI も、 > 何の言語もバンドルされていない Visual Studio 2008 が、タダで手に入るってことだ。 > そして、VSShell がインストールされた状態で、F# をインストールすればよい。 > そうすれば VSShell に F# が組み込まれるのだ。 Visual Studio で F#の開発を行う - ピコピコの日記 d.hatena.ne.jp/net-k/20080911/1221099444 > F#はVisual Studio 2008 もしくは、Visual Studio 2008 Shellから利用することができる。 > Visual Studio 2008 を持っていないので、無償で公開されているVisual Studio 2008 Shellをダウンロードした。 > ちなみに、Visual Studio 2008 Shell とは、C++やC#などの開発環境が何も入っていない状態のVisual Studio 2008で、 > Visual Studio向けの開発環境をSDKを使って組み込むことができる。 Visual Studio Shellダウンロードしてくるわ。 ありがとう。
474 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:36:42 ] >>468 はこれか。 d.hatena.ne.jp/camlspotter/ いろいろ挑発的なことが書いてあるな
475 名前:デフォルトの名無しさん [2009/03/22(日) 17:40:50 ] 下がりすぎだろ
476 名前:デフォルトの名無しさん [2009/03/24(火) 16:39:37 ] FParsecの話なんかやってくれないかなあ
477 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:11:44 ] こやつめw