【.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/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 
解説しただけなんだから、俺に言うなよ(´・ω・`)
494デフォルトの名無しさん
垢版 |
2013/09/15(日) 23:08:27.79
>>493
だから解説になってねえんだよバカタレが
なんだ、お前そんなのも知らんのとかいいたいだけのカスか
さっさと消えろ
495デフォルトの名無しさん
垢版 |
2013/09/15(日) 23:10:32.47
>>493
なんだ、お前そんなのも知らんのとかいいたいだけのカス
496デフォルトの名無しさん
垢版 |
2013/09/15(日) 23:13:23.78
>>488
スタンドアロンで使うのがどれだけ普通なのか
わざわざしゃしゃり出てきたお前が解説しろ
2013/09/16(月) 00:31:15.46
>>494-496
だから>>486でイミフな絡み方してるから日本語の解説してやっただけだろ。
教えてくんならそれらしく下手に出てればいいのに。
>>484でスタンドアロンがいいっていうから>>485がスタンドアロンでインスコできるだろって親切に教えてやって>>486で逆切れしてるながれなのに、スタンドアロン環境が普通かどうかとかってそれ論点じゃねーだろw
塚その日本語能力のなさお前ら同一人物だろwww
情報ないのかと思ってぐぐったら簡単に見つかったけど教えてやらんわ(´・ω・`)
498デフォルトの名無しさん
垢版 |
2013/09/16(月) 02:52:48.07
>>497
迷惑なやつだなおまえ
スレタイ読んで書き込んでんの?
499デフォルトの名無しさん
垢版 |
2013/09/16(月) 02:54:02.20
>>497
いや同一人物ってわかるだろ
どんだけバカなのおまえ・・・
500デフォルトの名無しさん
垢版 |
2013/09/16(月) 02:55:53.81
>>497
> だから>>486でイミフな絡み方してるから日本語の解説してやっただけだろ。
> 教えてくんならそれらしく下手に出てればいいのに。
おまえのがイミフ
日本語の解説ってそういうスレなの?
スレタイ読んでどうしても日本語の解説したかったとか
くだらん頭おかしすぎ
501デフォルトの名無しさん
垢版 |
2013/09/16(月) 02:58:51.30
> 情報ないのかと思ってぐぐったら簡単に見つかったけど教えてやらんわ(´・ω・`)

おまえ・・・やっぱり知らないくせに適当に書き込んでたんじゃん
だからさ俺が知ってるとかじゃなくて
ちゃんと知られてないからマイナーなんだよって言ってんだけど?
相当くずだなおまえも

>塚その日本語能力のなさお前ら同一人物だろwww
これはあたまおかしすぎ
過疎スレの皆さんにごめんなさいしろよゴミ男が
502デフォルトの名無しさん
垢版 |
2013/09/16(月) 02:59:36.35
大事なことなので訂正
× 相当くずだなおまえも
○ 相当くずだなおまえが
503デフォルトの名無しさん
垢版 |
2013/09/16(月) 03:05:58.44
>>484でスタンドアロンがいいっていうから>>485がスタンドアロンでインスコできるだろって親切に教えてやって>>486で逆切れしてるながれなのに、スタンドアロン環境が普通かどうかとかってそれ論点じゃねーだろw

>>485のどこが親切なんだよ
おまえの国じゃこれが親切なのかくずだなすばらしいね
おまえスレ違いすぎだからスレタイよく読んで書き込めカス
スタンドアロンでの使われ方は普通には知られてない裏技的なものだし

それに俺の言いたい論点はこれだけ
>なんだ、お前そんなのも知らんのとかいいたいだけのカスか

おまえみたいに無自覚に迷惑かけてるやつが一番迷惑だからさっさとでてけ
504デフォルトの名無しさん
垢版 |
2013/09/16(月) 03:08:44.77
なんだ、お前そんなのも知らんのとかいいたいだけのカスか
505デフォルトの名無しさん
垢版 |
2013/09/16(月) 03:11:13.20
>fsiやfsc はスタンドアロンでインストールもコンパイルもできるだろ?

これが親切に教えてくれてるとかどういう頭の構造してんだよ
なんだ、お前そんなのも知らんのとかいいたいだけのカスじゃないか
2013/09/16(月) 11:31:59.04
危ない人に触ってしまった(;´∀`)
2013/09/16(月) 17:43:47.65
御苦労
2013/10/02(水) 23:50:05.84
No Starch から F# 本
http://nostarch.com/fsharp
2013/10/03(木) 09:56:00.15
>>508
ebookは出ないの…かしら(´・ω・`)
2013/10/03(木) 15:56:47.51
>>509
no scrachならしばらくすればoreilly.comで売られる
2013/10/03(木) 17:31:38.68
>>510
オライリーにリンクはあったけどまだebookのはなかったぽ。
まだ先そうだし待つわー(´・ω・`)
2013/10/03(木) 19:25:03.49
>>511
多分正式番でるまでは無理だね
紙も同じだけど
もしかしたらsafariとかは来る可能性あるかな
2013/10/06(日) 18:17:39.58
igetaさんのIE本買ったけどこれF#でやる必要性あるの?
2013/10/07(月) 04:37:19.99
>>513
何それ。
2013/10/07(月) 08:08:19.11
>>514
これ。
http://www.amazon.co.jp/dp/4798039152
今F#のところを読んでたらスクレイピング処理が結構複雑だったから
F#のような高級言語でやる必要性があるかもしれないとは思った。
株価データを扱ってるから、金融の人に興味を持ってもらおうという魂胆?
2013/10/07(月) 10:21:26.00
あー前つぶやかれてはったなー
中身知らんけど一つの方法としてF#か^が楽ならいいんじゃない?

まぁ誰もその表紙で中にF#が出てくるとは夢にも思うまいに。
517デフォルトの名無しさん
垢版 |
2013/10/07(月) 11:45:29.27
昔はVBAで結構いろんな事やってたんだろうね
今、イチからやるならあえてVBA経由する必要は無いと思うけど
2013/10/07(月) 19:03:18.88
F#ではじめる金融工学入門、とかなら読んでみたい。
2013/10/08(火) 22:14:22.67
なんか呼ばれてた。

どうなんでしょうね。著者の方が決めたテーマですから。
僕はそれをコードに落とし込んで原稿にしてってとこを
お手伝いしただけなので。

F# でやる意味、というか、ネタ的な章という位置付けで。
.NET の言語とも連携できるんだよーって紹介でもあり。

なら C# でいいじゃん、ではあるけど、VBA 使いでもある
僕の感覚としては、OOP な C# よりも、モジュール、関数
が書ける F# のが割となじむような気はします。
2013/10/08(火) 23:02:38.13
その本のF#のページってどのくらいですか?
多少でもF#の勉?になるのかな
2013/10/08(火) 23:03:17.09
>勉強
2013/10/08(火) 23:55:38.09
最終章の Chapter11 が F# ネタ。たぶん30ページくらい。

www.shuwasystem.co.jp/products/7980html/3915.html

正直 F# の勉強にはあまり向かないと思います。

あくまで、F# で作った dll を VBA から叩くために COM 相互運用
機能を利用するにはどうやるかに主眼を置いていて、VBA な人にも
F# に興味を持ってもらえたらなあって内容なので。
2013/10/09(水) 00:37:55.49
なるほど ありがとうございます。
本屋で見かけたらとりあえず少し立ち読みして買うか考えようかな
2013/10/17(木) 00:15:06.24
[悲報] The Book of F# の表紙決定か
http://nostarch.com/sites/default/files/imagecache/product_full/fsharp_cover_web.png
2013/10/17(木) 00:32:17.25
oh...
2013/10/17(木) 01:01:01.67
だっさー(´・ω・`)
2013/10/17(木) 01:54:53.72
>>518
http://www.manning.com/petricek2/
この本に"Numerical computing in financial domain"と
"Implementing a trading system"という章が入るみたい
2013/10/17(木) 13:52:30.11
ブックカバーが必須だな
2013/10/18(金) 14:00:10.15
>>518
MEAPから見出しを抜粋するとこんな感じ:
4 Numerical computing in finance domain
4.1 Introducing financial derivatives
4.2 Using probability functions of Math.NET
4.2.1 Configuring F# Interactive
4.2.2 Download and Set up Math.NET Numerics
4.2.3 Introducing Random Variables, Expectation and Variance
4.3 Geometric Brownian Motion and Monte Carlo Estimate
4.3.1 Modeling stock prices using geometric Brownian motion
4.3.2 Payoff Function, Discounted Payoff, and Monte Carlo estimate
4.3.3 Analaysing Monte Carlo estimates using variance
4.3.4 Pricing oath-dependent options
4.3.5 Variance reduction using antithetic variates
著者はChao-Jen Chenだそうな。
2013/10/26(土) 00:51:59.61
type T = [<Leaf>]A | [<Node>]B of T * T
この型Tに対して
let rec size = function A -> 1 | B(x,y) -> 1 + size x + size y
こんなような関数を大量に自動生成したいんだけど
Reflection+CodeDom以外に選択肢ある?
2013/10/26(土) 15:57:40.32
>>530
直感的に思いつくのはT4だけど、F#プロジェクトではサポートされてないから
T4用にC#かVBのプロジェクトを追加して、そっちで生成したファイルをF#プロジェクトに追加すればいいかもしれない。
stackoverflow.com/a/2199527
2013/10/26(土) 19:51:58.54
>>531
情報ありがとう
T4はF#だと茨の道くさいからCodeDomで頑張りますわ
533デフォルトの名無しさん
垢版 |
2013/11/21(木) 06:01:23.06
盛り上がってるね。
2013/11/29(金) 22:07:58.73
2013/12/08(日) 16:19:46.81
TIOBEで20位入ってる。
周りで流行ってきてる実感ありますか?
2013/12/08(日) 18:46:21.38
発表当時の方が、順位高かったという、、
msdnでドキュメント公開されたタイミングでのカウントが大きいのかもね。

msdnでF#のドキュメントが日本語になってるのは凄いとおもうが、MSでF#セミナーやってるとか聞かないし、宣伝部隊がいないんじゃないかな?
http://msdn.microsoft.com/ja-jp/library/dd233154.aspx
2013/12/08(日) 20:16:26.82
VisualStudioで扱える関数型ということで期待したが、
言語仕様が古臭すぎて萎えた。

・ ソースコードのコンパイル順序を指定
・ 基本的に後方参照不可
・ 循環参照にはキーワードが必要

1980年代にタイムスリップした気分だぜ。
2013/12/09(月) 19:19:17.64
>>537
実際それぐらいまで一度戻って、プログラミング遍歴を全部やり直すぐらいの覚悟はいるかも。得られるものは大きいけどね。
539デフォルトの名無しさん
垢版 |
2013/12/09(月) 19:25:15.19
>>537
むしろその方がどこで参照されるか想定できるから俺は嫌いじゃない
2013/12/09(月) 21:08:27.13
はきだめ
2014/01/01(水) 20:59:15.21
RProviderでCRANを使う場合ライセンスってどうなる?
もしRProvider経由でGPL汚染するならCRANは件並みGPLだからオワタ\(^o^)/
2014/01/02(木) 07:04:43.25
け、件並み……?
2014/01/04(土) 04:16:41.65
くだんなみだろ
2014/01/04(土) 08:43:30.22
>>542-543
件並みじゃなくて軒並みだった(´・ω・`)
https://www.google.co.jp/search?q=%22%E4%BB%B6%E4%B8%A6%E3%81%BF%22
結構引っかかるけど間違いなのね・・・
2014/01/04(土) 11:30:09.14
F#はJ#のようにVSの一部でしかないのですっかりPowerShellより日の当たらない存在
スタンドアロンで使えるじゃねえかといかいうバカも居るけど
そうやって使ってる奴はいないわけで
2014/01/04(土) 12:22:57.82
F#専用サイトだったhubFSがFPishという関数型言語総合サイトに変わって数年たつし
F#の話題がないのは海外でも同じなんだよね
日本の弱小ブロガーだけがスタンドアロンで余裕で使えるわ!、
などとおつよそうに喧嘩売ってくるという有り様
547デフォルトの名無しさん
垢版 |
2014/01/04(土) 13:19:08.08
海外でも国内でも使ってことのある人の中ではバランスのとれたとても良い言語となってると思うけど…
Xamarinの方でも積極的に取り入れてるし一定の評価えてるとおもうけどな。
F#のコミュニティ見てるのでそれ以外の声が全然ないかは知らん。
自分は必要ない限り極力F#使ってC#成分はできるだけ減らしてる
2014/01/04(土) 13:23:37.25
C#に勝とうとしちゃなんね。
それよりはF#の強い部分をアピールすべきだなんや。
2014/01/06(月) 11:07:56.94
構文木をこねくり回すプログラムを書く必要があったからF#使ってたけど
最近は数値計算が多くてなんかもうC#に絞った方がいいんじゃないかって気がしてきた
F#の利点は何かありますか?
550デフォルトの名無しさん
垢版 |
2014/01/06(月) 11:22:48.48
>>549
むしろC#で書く利点がなに一つなくね?
2014/01/06(月) 14:40:34.42
>>544
一応確認しておくけど、読みは「けんなみ」じゃないからね
2014/01/06(月) 14:42:09.36
>>550
変態さん以外にも読める
2014/01/06(月) 15:58:12.72
そういえば、F#のMVPであるbleisという人が、彼女が出来てリア充になったそうな。
F#erになるとリア充になれる!?
2014/01/06(月) 17:55:13.35
>>550
数値計算本のアルゴリズムはだいたいCとかで書かれていて
ループ内でbreakやcontinueが使われているものが多いんだわ
だからF#で書きなおす際に頭を悩ますというのが最大の問題
あとx *= 2.0とか書けない
2014/01/06(月) 20:44:57.02
VSバージョンあごるごとにインストール方が微妙になって行ってるのはなんなの
どこがスタンドアロンで余裕なんだよ

>>553
それは花王デモの主催者が彼女出来て活動終了したのと同じで本人次第
花王デモやF#を選んだのが正解だったというわけではない
>>554
コア部分のロジックをF#で書けばいいんだ!なんて
息巻いてた奴らクソうざかったんだけども彼女が出来てやめたんだろうな
>>550はブサすぎてできないらしい。こういう奴もいるから
2014/01/06(月) 20:47:17.42
バージョンあごる、はこっちの方言だからあってるからな
件並みは方言ではないけど
2014/01/06(月) 23:01:03.05
>>554
なるほどね。
558デフォルトの名無しさん
垢版 |
2014/01/06(月) 23:25:46.21
>>554
業務でCで書かれた配列の更新とかループバリバリのアルゴリズム、F#で書き直したらすごいスッキリしたよ。
559デフォルトの名無しさん
垢版 |
2014/01/06(月) 23:28:00.85
>>552
C#人口が多いのは確かにありだね。
うちの会社は勉強会とかしたら色々と難しそうだけどいいんじゃね?って話になって導入が進みそう。
2014/01/07(火) 03:09:02.16
知名度低すぎ
2014/01/07(火) 21:13:51.84
IDEを使えないスタンドアロンには意味は無いからな
UNIX勢だって補完なしでCUI使うやつなんかいないよ
3.1はVS expressではまだ使えないのか
562デフォルトの名無しさん
垢版 |
2014/01/07(火) 21:57:12.38
MonoDevelopならいけんじゃね
2014/01/07(火) 23:37:10.88
ML使いを取り込めてるの?
2014/01/08(水) 02:19:46.83
スタンドアロンでコンパイルしてみたらリファレンス関連が不明過ぎてこれはアカン
調べてもexpress使えだし
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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