1 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 14:03:05 ] MSResearchから出てきた.NETで使える関数型言語のひとつF# OCAMLの流れを汲むこの言語、いろいろと面白そうなことができそう。 まだまだ英語の情報しかないこの言語について、幅広く語れ。 research.microsoft.com/fsharp/fsharp.aspx
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