【.NET】F#について語れ2【OCAML】

■ このスレッドは過去ログ倉庫に格納されています
2011/05/01(日) 02:46:49.52
MSResearchから出てきた.NETで使える関数型言語のひとつF#
OCAMLの流れを汲むこの言語、いろいろと面白そうなことができそう。
そろそろ日本語の情報が充実してきそうなこの言語について、幅広く語れ。

http://www.fsharp.net/

前スレ
【.NET】F#について語れ【OCAML】
http://hibari.2ch.net/test/read.cgi/tech/1186030985/

関連スレなどは >>2-
2013/02/23(土) 14:56:47.28
F#やってみて、階乗から始まってフィボナッチ、ハノイの塔、クイックソート
正規表現抹茶あたり組んでみたけど、なんか飽きちゃったなあ。
なんか面白いテーマないかな。

プログラマとして勉強になるのかな、と思ってたけど、CでもRubyでもできるよ
ねこんなのは。>>3
2013/02/23(土) 15:12:30.25
入力補完がC#並みなら最高なんだが・・・
2013/02/23(土) 15:31:00.16
>>393
そんなん、ただ再帰を使ってるだけやん。
関数型のかのじも使ってないぞそれ。
2013/02/23(土) 15:40:08.94
それコピペだよ
2013/02/23(土) 16:23:42.54
C#に対するF#の利点は、やはり代数的データ型だと思うんだよな。
代数的データ型の何がいいかって言うと、もちろん宣言的に値の分解ができるからプログラムが読みやすいっていうこともあるんだけど、
データに対する操作の追加が簡単だという利点があると思う。
まぁ、C#でもis演算子かvisitor使えばいいんだけどさ、is演算子だと網羅性チェックしないから書き忘れしやすいし、
visitorは、まぁC#だとlambdaがあるから楽かもしれないけど、でもちょっと面倒くさいし。
それで、代数的データ型がマッチするタスクは何かって言うと、
http://ymotongpoo.hatenablog.com/entry/20111105/1320506449
これのconnection_state型みたいに、いろんなところで使えるものだとは思うんだけど、
一番目立つのはコンパイラ作成の用途かね。C#だとサブクラス作りまくりになる。
実践プログラミングDSLに金融取引を記述するための外部DSLを作る章があったけど、ああいうの。
でもまぁ
http://tomschrijvers.blogspot.jp/2012/12/haskell-tsuru-capital.html
こういう金融ベンチャーっぽいところだと活用してるんだろうけど、普通のプログラマだと活用する機会は少ないだろうなw
2013/02/23(土) 17:39:24.06
C#との比較で見たときにキャッチーに利点を説明できる要素
ならまあ代数的データ型ですねぇ。

自動実装プロパティに初期値を与えられるのとかも地味に便利。

member val Count = 0 with get, set
2013/02/24(日) 09:07:24.31
RoslynでC# REPLが可能になったらF#オワコンですよね
2013/02/24(日) 09:54:11.59
>>399
せめてまともな型推論を実装してから出直してくれ。

F#並の簡潔な記述
代数データ型とパターンマッチング
REPL
モナドサポート
イミュータブルデフォルト

最低でもこの辺が出来ないことには話にならない( ´Д`)y━・~~
2013/02/24(日) 14:05:13.15
REPLとかいらないけど、他の4つはC#でもホント欲しいな
2013/02/24(日) 22:12:05.46
C#のREPLは昔からmonoにはあった。
用途も増えてるようで、最近改良してるみたい。
http://tirania.org/blog/archive/2011/Feb-24.html
http://www.mono-project.com/Release_Notes_Mono_3.0

mono関連で構文解析もMonoDevelop(IDE)のコード支援に使ってるやつがすでにある。
https://github.com/icsharpcode/NRefactory

逆にF#はMSRがオープンソース版を用意してるので、MonoDevelop用プラグインだけMono関連で作られている。
2013/03/06(水) 19:30:36.08
#light "off"にして、あと警告がある場合はコンパイル通らない設定にして使ってる。
しかし、F#の構文だと関数適用時のインテリセンスが微妙…。
2013/03/11(月) 18:45:28.36
「ビッグデータの世界でF#が大流行、
研究者の心を鷲掴みする謎のプログラミング言語」

ってマジ?
2013/03/11(月) 18:55:08.71
タイトルが変
2013/03/11(月) 21:55:23.57
>>404
流行しているというか
MicrosoftがBig Dataサイエンティスト界隈に
流行させようと画策しているというのが正しい。

http://www.infoq.com/presentations/F-Sharp-Big-Data-Scripting
bigdataは一回のクエリに時間がかかるので
codeのバグで時間をロスしやすい。
そしてcodeは書き捨てであることが多い。
このようなタスクにはType Providerという
データスキーマの定義を元にクエリの型チェックやインテリセンスを行える機能
を持つF#が適している。
2013/03/11(月) 23:06:06.63
>>406
まぁ実際にサイエンティストから好評らしいけど
2013/03/12(火) 00:32:06.37
OCamlの一種としては悪くない処理系だし、
MLユーザーは少々の方言は気にしない。
2013/03/12(火) 07:14:16.74
F#だと複雑なロジックがこんなに簡単にかける系のリンクってない?
2013/03/12(火) 16:59:56.81
F#にしたら息子が大学に合格しました
2013/03/12(火) 17:05:28.24
>>410
Fランクよりちょっといいぐらいの大学ですね。おめでとうございます
2013/03/12(火) 17:15:20.19
F#がセクシーすぎて息子が大きくなりました
2013/03/12(火) 18:49:33.85
>>410
F# snippetでググれ
2013/03/12(火) 19:46:10.30
>>408
MLに派生と方言以外の何があるというのだ
2013/03/13(水) 01:19:20.57
名前にスタンダードが付いてるMLあるよね。
2013/03/16(土) 14:07:06.68
とりあえずGUIはC#でとか言ってるうちは流行らんな
2013/03/17(日) 00:00:06.57
いくら糞レスで埋めようがにぎわってねえからな
勘違いすんじゃねえぞ
2013/03/17(日) 01:07:49.88
http://fsharp.github.com/fsharpbinding/
monodevelop以外にも、emacs、vim向けのIDE環境の準備中なんだな。

Monoは、Mono 2.xから3.x、Monodevelop 3.xから4.xに移行中で、F#3.0もちょうど狭間にある感じだな。
そして、Xamarin Studio 4.0向けのコンパイル済みプラグインがここにあった。
http://atsushieno.hatenablog.com/entry/2013/02/21/151834
2013/04/02(火) 01:09:23.44
WebShaper、クローラー・クラウドからスマホアプリまで頑張ってるな。
https://github.com/intellifactory
http://www.infoq.com/jp/news/2012/07/WebSharper-Open-Source

http://t0yv0.blogspot.jp/2013/03/websharper-phonegap-and-ripple-easier.html
http://www.websharper.com/blogs/2013/3/3054
http://www.websharper.com/blogs/2013/3/3055
2013/04/02(火) 02:16:28.77
letって何かの略?障害?
許可じゃimmutable的に意味逆になるだろうし
2013/04/02(火) 13:43:16.63
辞書引けば書いてるだろ数学用語だよ
2013/04/03(水) 10:03:00.29
F#の本ヌレおしえたもれ
2013/04/03(水) 12:39:13.08
どうしてこうなった
2013/04/03(水) 22:16:19.55
本国はTryF#作るまでやる気あるのに
MS日本法人のほういつまでも翻訳せず
やる気が感じられないからしょうがない

英語読めないヤツのほうがもっとやる気ない
とかいうのは無し
2013/04/04(木) 23:16:38.72
F#は全社で取り組んむべき題材ではないということだろうな。
いちおう詳しいMSの日本人もいるのかな?
2013/04/06(土) 09:55:55.45
MS Research製だから、日本にMSR支部がないのがまんま影響してんじゃないかね。
2013/04/07(日) 05:35:12.80
TryF#を2ページくらいやったけど
他のプログラミング言語やってないと辛い
4歳児よくできたな・・
2013/04/12(金) 15:08:15.32
プログラミングF#3.0早く出ないかなー
2013/04/29(月) 19:55:54.92
真のサイエンティストはF#じゃなくていまだにFortran使ってるけど
2013/05/09(木) 15:15:17.55
エクスプローラ上でfsxファイルを右クリックするとRun With F# Interactiveで直接実行できるわけですが
同じようにVS 2010上のfsxファイルを直接実行する方法ってありますか?
F# Interactiveウインドウにfsxファイルをドロップするだけで動いたりしたら嬉しいのですが・・・
2013/05/10(金) 01:07:12.40
VSで常用してる人が多かったらこのスレもっと勢いあるだろうね
2013/05/20(月) 02:55:30.08
言うまでもないが、F#3.0はxp vista切り捨てのVS2012でしか動かない
最先端に追従してるF#3.0がD言語より語られてないのは皮肉な話だと思う
VS2012スレもようやくVS2010スレの勢いを超えたというのに・・・
2013/05/20(月) 02:56:39.09
かと言って2.0使い続けてる奴もいないよな?
2013/05/23(木) 20:59:58.16
時代を先取りしすぎた言語
数年以内に消える
2013/06/01(土) 11:24:51.60
>>408
HaxeとかOCamlで実装されてるんだっけか…
型推論とか最近の流行なのかしらんけど
2013/06/06(木) 16:55:01.31
vsに統合されることがゴールで
めでたくvs2010とvs2012に標準搭載されたというのに
語る人が全くいなくなった・・・

vs shellの存在意義が未だによくわからん
そこまでやるならスタンドアロンのコマンドラインツールでいいだろ・・・
2013/06/06(木) 20:04:10.68
http://blogs.itmedia.co.jp/barbaro/2008/10/delphi-prism-1d.html
一時期、VS ShellがあるとサードパーティのIDE開発のコストが低減されますというねたがあった。
2013/06/06(木) 21:09:08.17
MSKKの人は「F#とか流行るわけねーだろwwwww」みたいなこと言ってた
え、MSの人がそんなこと言っていいの?とか思ったけどだまってた
2013/06/06(木) 21:46:31.57
GHC(Haskell処理系)プロジェクトのコアメンバーにMSの研究員がいるんだけど、
彼はF#について、そしてF#の名がMLに贈られたことについてどう思ってるんだろ?
2013/06/07(金) 00:03:00.45
MSRケンブリッジは魔の巣窟だなー
2013/06/07(金) 00:12:41.32
MSRには、会社に研究内容制限されず、勲章を運んでくるのがお仕事になるトップ論文投稿者がたくさんいるらしい。
アップルはジョブズがもどったときに全員首切ったという伝承がある。
どちらかというと、Don SymeがわざわざMSのためにF#作ってる理由が知りたい。
2013/06/15(土) 03:29:35.49
VS2010でF#のプロジェクトに新しいフォルダを作成して追加するにはどうすればいいでしょうか?
2013/06/16(日) 23:20:19.78
>>442
エクステンションいれないと無理よ(´・ω・`)
2013/06/17(月) 01:10:42.30
>>443
それを聞いて調べたところF# Project Extenderを入れれば良さそうなのでさっそくいれてみましたが
Enable F# Project Extenderをクリックするとエラーが出たので諦めます(´・ω・`)
2013/06/21(金) 00:36:35.29
http://funscript.info/
F# Expertは、webレンダリングで得体の知れない仕組み考えるのが好きだな。
2013/06/29(土) 02:59:07.32
http://blogs.msdn.com/b/fsharpteam/archive/2013/06/27/announcing-a-pre-release-of-f-3-1-and-the-visual-f-tools-in-visual-studio-2013.aspx

F#3.1 previewきたー
2013/06/29(土) 07:08:57.35
Named union type fieldsはよさげだなあ
2013/07/11(木) NY:AN:NY.AN
VS Desktopにも入れてくれないかな
VS Web入れてみたけど訳が判らないよ
2013/07/12(金) NY:AN:NY.AN
http://blogs.msdn.com/b/dsyme/archive/2013/07/11/f-c-jobs-in-machine-learning-data-tools-microsoft-research-redmond.aspx
ケンブリッジじゃなくてレドモンドで求人してる
2013/07/12(金) NY:AN:NY.AN
Scala33位
F#37位

TIOBEで比較するとそれほど差はない
むしろF#のが力強く感じられる
2013/07/15(月) NY:AN:NY.ANID:um2YQEwB!
最初moduleでモジュール化してたけど
途中から型や値をパラメータ化したくてclassに変えようとしたら
構文が違いすぎてあと内部classも作れなくて死んだ
2013/08/05(月) NY:AN:NY.AN
>>450
なにを根拠に力強いんだよ
453452
垢版 |
2013/08/05(月) NY:AN:NY.AN
>>450
22 D 0.567%
23 F# 0.538%
24 Lua 0.531%

34 Haskell 0.349%
35 Erlang 0.344%
36 Prolog 0.334%
37 Scala 0.332%

うーんとしか・・・
2013/08/06(火) NY:AN:NY.AN
ネタにマジレス
2013/08/10(土) NY:AN:NY.AN
MonoDevelop+F#Bindingsでコンパイル順の変更ができない…
やる気無さすぎだろこれ
456デフォルトの名無しさん
垢版 |
2013/08/18(日) NY:AN:NY.AN
結局MonoDevelop諦めちゃった…
2013/08/20(火) NY:AN:NY.AN
>>455
そこらへんは、作者に言わんと永久に治らないかも。
githubで開発してると思うから作業リストには入るだろうし。
>>456
まだベータ版ぐらい?
そう言えば、monodevelopやxamarinstudioだと実行がうまく出来ない環境があって悩むことがある。
2013/08/21(水) NY:AN:NY.AN
>>457
どっちも同じ人間だよ
git上のFSharpBindingsだと順序変更はできるようになってた
でも新しいMonoDevelopが必要で自前でそれもビルドしたから
設定がとても面倒だった

その後MonoがWinFormsに実質未対応なのに気づいて
それでも他の部分だけと頑張ったけど
IDEそのものが自分には使いづらくて無理だった
F#は素直にVSでやることにした
2013/09/06(金) 06:21:51.94
具象型にいちいちインターフェース型をキャストすんのめんどくさ!
これ一つづずつ実装するかキャストしないといけないのか?
2013/09/06(金) 19:49:58.03
実装を意識したくないからインターフェースをはさんでるので
キャストしちゃうと台無しですよ。
2013/09/06(金) 22:06:13.15
>>460
すみません、逆方向です

let impl :ISome = new Impl() ;> ISome

こんな感じで一旦アップキャストするのが面倒なんです

単にISomeを実装しただけではImpl型でメソッドを呼び出せないので
実装のテストだと例えば3つ実装していた場合、
毎回使用するインターフェイス別にキャストしなくてはいけない
それかImpl自体にそれぞれ同名のメソッドを用意するしかない

他言語ともやりとりするので手軽に注釈なし'a 扱いもできません
私が何かとてつもない勘違いしてるんですかね…?
2013/09/06(金) 22:08:31.99
セミコロンはtypoです
> let impl :ISome = new Impl() :> ISome
2013/09/06(金) 22:38:38.48
なんで:ISomeと型を定義してんの?

インターフェースぐらいは暗黙に変換してくれてもいい様には思うが、F#では元々そんなインターフェース使わんからなぁ

Interopするなら別かもですが。
2013/09/07(土) 03:17:27.69
>>463
>なんで:ISomeと型を定義してんの?
こうしないとメソッドが呼び出せないからですね
でなければ呼び出す度にキャストすることになってしまうので

ただ雰囲気は大体わかりました
F#でクラス使ってOOしちゃいけないみたいですね…
ありがとうございました
2013/09/07(土) 04:52:09.47
>>464
いや右辺で型決めてんだから、左辺は書く必要無い。
オブジェクト指向もしちゃいけないじゃなくてやる必要が無いだ。

とりあえず関数型とF#勉強してから自分が書いた事を見直してみろ
2013/09/07(土) 13:33:50.24
>>465
すみませんが、問題にしてるのはキャストですので
可能であればそちらより解決策の提示を願います

>オブジェクト指向もしちゃいけないじゃなくてやる必要が無いだ。
それは現に必要な人間に言っても意味がないです

>とりあえず関数型とF#勉強してから自分が書いた事を見直してみろ
関数型はOCamlもHaskellも使ってます
私は純粋に外部利用のための解決策がないか探っているだけです
2013/09/07(土) 15:48:57.96
んじゃ好きなだけキャストしてろよw
2013/09/07(土) 18:21:28.54
>>461
>let impl :ISome = new Impl() ;> ISome
>>465さんも書いてますけど右辺で型が分かるので左辺は必要ないですよ。

>単にISomeを実装しただけではImpl型でメソッドを呼び出せないので
ISome型に定義されてるメソッドは呼び出せます。
ISome型で参照してるならImpl型で追加されたメソッドが
呼び出せないのは当然かと。

ここまで書いといてなんですが
私もF#は勉強中でOOP視点でレスしてます。

間違っている所があれば詳しい方、訂正お願いします。
2013/09/07(土) 22:36:02.91
>>468
> >>465さんも書いてますけど右辺で型が分かるので左辺は必要ないですよ。
大丈夫ですそこは理解してます
問題としているのは右辺のキャストです

私はレスを「なぜそこで型をキャストするのか」と解釈したので、
変なレスになってしまいました
左辺値の注釈は型推論でつまずくことが多いので癖で書いてます

>ISome型に定義されてるメソッドは呼び出せます。
上でも書いてますが、実装型をnewしても
1. インターフェース型にキャストする
2. インターフェース型を実装したものとは別に
  実装型に同名のメソッドを追加する
このどちらかをしないと同名のメソッドは呼び出せません
これが複数のインターフェースを使うとなるとその都度キャストという事になります
2013/09/08(日) 11:15:36.34
>>469
インターフェースの明示実装を利用しているため、明示的にキャストしたいということですね。

しかしこの場合、実行させたい関数等にtype hinting付けて、そこで指定したインターフェースのメソッドを呼ばせるべきだと思います。

これは、F#に限らず、C#でも同様です


また、もしそれがコンストラクタである場合も同様に、外部から注入すべきでしょう(依存性反転の原則)。

どうしても呼び出し先で、生成->実行したいのであれば、ローカル関数を経由すればいいと思います。
2013/09/08(日) 12:14:47.31
>>470
明示的にキャストしたいじゃなくてしたくないんでしょ。

インタフェースのメソッド呼ぶために関数を通させる意味が分からないんだけど、関数型のスタイルに合わせるため?

IHogeにキャストしたいなら、それをするiHとか短い関数作って(iH o).HogeHogeとかでいーんじゃねーの。
そもそもキャストが頻繁に起きるなら設計がおかしいだろ。
同じオブジェクトを各場所で適切なインタフェースとして保持管理出来てるべき。
2013/09/08(日) 13:05:41.78
>>470
大変参考になりました
特に注釈付き引数について、暗黙の挙動は存じておりませんでした
引数には適用されるんですね

DI部分に関してはもっともな意見だと思います
ただ、実装の確認テストの際に煩雑になるので、
テストしながらの作業では、その手間が惜しいです

そこでほしいのは明示的でないインターフェイス実装か、その代替です
この点はC#では同様ではないと思います

単なるわがままを続けても仕方がないので、これ以上は控えます
レスありがとうございました
2013/09/08(日) 13:30:14.10
すみません見逃してましたのでもうひとつだけ

>>471
アップキャストは設計上頻繁に起こっても全然おかしくはないです
というより良い設計では何でもインターフェイスにしますよ
逆に特定のインスタンスや型を扱うのは危ないです
2013/09/08(日) 15:16:04.41
>>473
そうじゃなくて複数のインタフェースを実装して、その場所場所でこのインタフェースを実装してるか的なことをしないといけないのがダメっていってんの。

そうで無ければ具象クラスをそのインターフェースとして扱い始める大元でキャストするだけであって使うたびにキャストがーなんて話はでてこない。
2013/09/08(日) 18:23:32.98
>>474
もちろん基本的にはそうだと思ってますよ
しかし、書いてるのはインターフェイスとしての扱いでなく、
実装動作そのもののテストコードです
実装クラスのメソッド呼び出しの手間について話しています

ここまで特殊化された物に一つずつインターフェースを書いて
それを使ってという事をする気はありません
なのでダメと言われても困ります
2013/09/08(日) 18:26:04.95
念の為付け加えますが、インターフェースの要件としてのテストコードは別にあります
問題にしているのは個々の実装クラスの特殊な動作を調べるコードです
2013/09/08(日) 19:12:41.19
>>475
お前がインターフェースの呼び出しがめんどくさい言ってて今更インタフェースの扱いじゃないってなんなの?

後段のインタフェースを書いてとかも意味分からん。
何したいの?もうめんどくさいから楽なC#でかけば?
478デフォルトの名無しさん
垢版 |
2013/09/08(日) 19:28:18.01
>>477
実装したメソッドを呼び出しするのが面倒だと何度も言ってるでしょう?
本当に理解できてます?わざと言ってるんですか?
2013/09/08(日) 19:31:50.35
すみませんついカチンと来てしまいました、謝ります
上に書いたとおりの手順でやってみればどういう意味かわかると思います
2013/09/08(日) 19:53:13.10
すまん。そもそもで恐縮だが、459の人はF#で完全OOPなコードを書こうとしてるの?
2013/09/08(日) 21:14:51.26
>>479
だからさー
上に書いた通りの手順でとか言われてもエスパーじゃないからわかんねーよ。
せめてアンカーでもつけたら?
お前の質問の仕方は相手にとってどう理解しやすくするかって視点が全てにおいて欠如してんだよ
2013/09/08(日) 21:28:38.91
こういうのはどう?

type ICounter =
 abstract member Inc : unit -> unit
 abstract member Count : unit -> int

type Counter(seed : int) =
 let mutable cnt = seed
 member this.i = this :> ICounter
 interface ICounter with
  member this.Inc() = cnt <- cnt + 1
  member this.Count() = cnt
2013/09/09(月) 11:43:41.19
これはにぎわってない
2013/09/14(土) 17:36:02.70
.net sdkだけでコンパイルできるスタンドアロン環境にしてくり
2013/09/14(土) 19:01:00.84
fsiやfsc はスタンドアロンでインストールもコンパイルもできるだろ?
2013/09/15(日) 15:04:09.99
疑問形で言われても。
一般的にはなんとかシェルがいるし裏技は知らん
2013/09/15(日) 15:04:52.15
>>486
もちろんexpressなんちゃらも入れたくないってことな
2013/09/15(日) 18:02:07.33
>>486
疑問系ってよりも、お前そんな事も知らんの?って意味の確認だろ。
2013/09/15(日) 18:13:45.88
unix-monoでF#な俺に死角は無かった
490デフォルトの名無しさん
垢版 |
2013/09/15(日) 21:11:33.10
>>488
なんだ、お前そんなのも知らんのとかいいたいだけのカスか
どんだけこのスレ過疎ってると思ってんだよまったく
そんなんだからF#がこんなかわいそうなことになってんだろ

あげ
491デフォルトの名無しさん
垢版 |
2013/09/15(日) 21:12:22.99
>>488
こんな過疎スレなのにこんな人間のクズしかいないとは哀れすぎる
492デフォルトの名無しさん
垢版 |
2013/09/15(日) 21:18:26.19
そもそもスタンドアロンで使ってる奴がどんだけいるわけ?
なめてんじゃねえよ
2013/09/15(日) 22:40:19.72
>>490-491 
解説しただけなんだから、俺に言うなよ(´・ω・`)
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況