【.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-
139135
垢版 |
2011/07/02(土) 01:56:39.99
>>136-138

レスありがとうございます.
let loopですっきりとした記述ができました.
2011/07/05(火) 06:48:35.87
2011年、Ruby,Perl,PHP,Pythonって並べたときにさ
ここで、Ruby以外を選ぶ奴ってマジでなんなんだろうな


ゴミだし
2011/07/05(火) 13:47:18.60
これ ; デリミタっていうんだけどさ、これをつけなきゃエラーになるような
そんな言語使ってる奴ってどうみてもゴミだと思うんだけど

もしかして「;」これ打ち忘れてコンパイルエラー出すのが楽しいの?
そうか、二度と話かけんなよ


ゴミの分際でw
2011/07/10(日) 11:33:45.10
つ #light
2011/07/12(火) 18:22:39.87
コード見てないが、意外とF#遅くてがっかし(´・ω・`)
http://users.softlab.ece.ntua.gr/~ttsiod/score4.html
2011/07/17(日) 00:05:23.57
誰かseqのBuilderを実装しているソースどれかわかる人います?
2.0のソースはあるんだけど検索してもわからんです…
2011/07/17(日) 10:04:55.63
>>143
コード見ようや・・・
http://d.hatena.ne.jp/einblicker/20110712/1310476340
2011/08/07(日) 02:29:54.25
TIOBE TOP20入りしてた
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
msdnでドキュメント公開してるのも大きいんだろうな
2011/08/20(土) 02:34:49.66
F#って何がいいの?
って言う人には
http://www.slideshare.net/bleistift/cvbf
これを見るといいかもね?
2011/08/20(土) 02:38:41.36
あとこの辺も見ておくと
勉強になるかもね?
http://d.hatena.ne.jp/bleis-tift/20110803/1312345593
2011/08/20(土) 06:04:16.54
>>147 >>148
なってないなぁ…と思う。
そんなもん見るよりも、ちゃんと時間取って実践F#読む方がずっといいよ。
2011/08/20(土) 10:46:16.38
>>149
なってないなぁ…と思う。
そんなもん見るよりも、ちゃんと時間取ってExpert F# 2.0読む方がずっといいよ。
2011/08/20(土) 11:46:15.04
Real-World Functional Programmingも宜しくね
2011/08/20(土) 21:29:33.05
ちなみに何がなってないの?
153149
垢版 |
2011/08/21(日) 08:02:31.09
>>152
突っ込むために見直してみたら、そんなに突っ込み所は無かったかも。
>>149で頭ごなしに否定するのはまずかった。反省してる。

初見ではもっと気になる所があった気がしたけど、今見て思うのは以下。

・P35-P43 if式を(.NET中では)F#に特徴的、みたく書いてるけど、実はVB.NETにもif式はあるのです…
・P85 高性能、ではなくて、高機能、では?
・タプルを使ったPythonでいうアンパック代入相当の構文を備えていて、
 多値関数の戻り値が(x,y) = funcHoge(a,b)みたいに自然に書ける説明が抜けてる。
・リスト操作用の組み込み高階関数の説明が無い。

とか。重箱の隅かもしれんけど、気になるんよ。
154関数型入門中
垢版 |
2011/08/21(日) 19:29:53.73
質問させてください。

ここ数ヶ月、関数型言語をいろいろ見ています。(Scala,Haskellなど)

実践F#という本を読んでいます。

ちょっとこういう場合どうすればいいか、わからないことがあり質問させてください。

あるレコードが定義されている場合、
そのレコードに対して適用できる一連の関数を知る方法ってありますか?

実践F#には、同じ名前空間に、レコードと同じ名前のモジュールを定義して、
そこに関連する関数を書くとよい、とされていますが、
実際そうされているものでしょうか。

一つに、Haskellの型クラスのような仕組みがあれば、見通しがよくなると思うんですが
そういう仕組みはないんですよね? (Scalaにもなかった。。)

なにか、自分で設計する場合、他人が見てもわかりやすい方法などあれば教えてください。
よろしくお願いします。
2011/08/21(日) 20:41:30.81
レコード型のメソッドにしてみてもいいんじゃないでしょうか
2011/08/21(日) 21:20:09.09
>>154
ある型に対する一連の関数を知る方法は、簡単にはないですね。
AppDomainをリフレクションで総舐めとかすればそりゃ別ですが。

型と同名のモジュールを作ってーというお作法は、まあ、ふつうはそうするかなあと。
もちろん、ふつうじゃない場合もあるわけだけど。

Haskell型クラスが美人なのはわかりますが、すでにインターフェイスで筋通してる
.NET(あるいはJVM)においてそれを求めるのは、ちょっと難しいかなあという感想。

>>155
関数型でなくOOPで、と。ええ、おっしゃる意味は解りますが、といって、たとえば
Fooオブジェクトを必要とする振る舞いがすべてFooのメソッドとして定義されるとは
限らないわけで。BarクラスのメソッドがFooを引数に取ることだってあるでしょう。

このあたり、私は、F#においてのみ特別不便だ、とは感じません。
157b
垢版 |
2011/08/21(日) 22:37:39.67
> 149
書いた人です。指摘してくれてありがとうございます!

>・P35-P43 if式を(.NET中では)F#に特徴的、みたく書いてるけど、実はVB.NETにもif式はあるのです…
確かに、誤解を招く書き方でした・・・
一応、VBのIf式は知っていたのですが、あくまでここでは
「C#にもVBにもif文があるけど、F#にはない」
ということが言いたかったのです。

>・P85 高性能、ではなくて、高機能、では?
うわ、全く気付いていませんでした・・・高性能はおかしいですね。

>・タプルを使ったPythonでいうアンパック代入相当の構文を備えていて、
 多値関数の戻り値が(x,y) = funcHoge(a,b)みたいに自然に書ける説明が抜けてる。
これは微妙なところで、タプルのみに限った機能ではないので省きました。
例えば、
type t = { Name: string; Age: int}
という型があったとして、t型の値xに対して
let { Name = n } x
ということも可能ですし、そもそもローカル変数に限った話ではなく、
let name { Name = n } = n
のように引数に対してのマッチも可能です。
let x, y = y, x的なものを入れるかどうかは迷ったのですが、結局入れませんでした。

>・リスト操作用の組み込み高階関数の説明が無い。
これは、この時のターゲットを考えて意図的に入れませんでした。
確かに便利な高階関数は色々と用意されていますが、それを列挙する発表ってつまらなくないかなぁ、と思ったので。
ただ、LINQ to Objectには一対一で対応するものが無いような高階関数の紹介はやってもよかったかもしれません。
158b
垢版 |
2011/08/21(日) 22:39:15.22
あ、let { Name = n } = xです。
2011/08/24(水) 01:30:04.05
お!本人であるbleisさんが降臨・・・
素敵!
160デフォルトの名無しさん
垢版 |
2011/09/07(水) 22:14:16.34
F#のすごい日本人おしえれ
161デフォルトの名無しさん
垢版 |
2011/09/07(水) 22:14:49.33
いますぐフォローすべきF#の人的なやつ
2011/09/07(水) 22:33:14.58
Googleで F# site:hatena.ne.jp とかやると、いろいろ出てくる
2011/09/07(水) 22:45:31.06
いないんだな、それが
というとアレだが、F# に特化してる人っているかね?
なにかしらほかの言語も使いつつ F# も嗜む的な
リベラルというか
2011/09/07(水) 23:40:27.20
金融系の人とかはOCaml使ってた人も多いらしいし、
F#も出来る人多いんじゃないの?
2011/09/08(木) 05:49:53.02
完全にF#で仕事、というのが日本にはない感じなので、そういう点で、人が見えないよね。
小物やらバッチに使うやらぐらいなら、そりゃあるだろうけれど。
かといってF#で何かOSSで作って公開、などという人もいないようだし。
2011/09/08(木) 08:49:22.56
>>165
え?
ttp://d.hatena.ne.jp/taedium/20110604/p1
2011/09/08(木) 12:11:17.65
F#セミナーいったら、
GUIアプリクライアントをF#で開発して納品した話をしてたよ。
2011/09/08(木) 15:48:51.11
活用例とかになれば
最終的には.netのグルー言語以外の何でもねえんだし
scalaにしろ、元にくらべての使い勝手の話になるんだから面白い話じゃない
.net嫌いな人ってもういないの?

>>160>>161
それなら各言語のすごい人全部まとめれ
2011/09/08(木) 23:16:33.81
F# Programming -Build MVVM Applications in F#
msdn magazine Sep. 2011
http://msdn.microsoft.com/ja-jp/magazine/hh394149(en-us).aspx
170デフォルトの名無しさん
垢版 |
2011/09/09(金) 19:54:27.44
会社にFランがいたけどひどかった。
#なんか付けたところで同じようなもんだろ。
171デフォルトの名無しさん
垢版 |
2011/09/09(金) 20:01:08.56
Javaの変態の人たちはScalaやってるのに、
なんてC#の変態の人たちはF#やんないの?
2011/09/09(金) 20:21:30.63
Javaは使いづらくてやっとレンガ、C#はそこそこ間に合ってしまうというのがあるんじゃ。
F#のほうが使いやすいけどねー
2011/09/09(金) 20:32:09.20
Javaと違ってC#は糞言語じゃないから。

C#にはラムダ式、まともなジェネリック、LINQがあるし、
次のバージョンではasync,awaitも入るのでF#のメリットが相対的に少ない。

また、F#はC#と比べてIDEの支援が弱いのというデメリットがあるので
(特に WindowsForms、WPF、ASP.NET MVCなど主要ライブラリ関連)
F#のメリットとデメリットを天秤にかけた結果、C#でいいやって事になってしまう。
2011/09/09(金) 20:34:00.21
むしろここの人たちがF#を使っている理由が知りたい
2011/09/09(金) 20:40:54.41
C#を使ってると「パターンマッチ使いてぇ」
って場面は割とよくあるんだけど、
それだけの為にユーザーの環境にF#ランタイムを入れさせるのは憚られたので
結局使ってない。

.NET FrameworkにF#ランタイムが含まれてたら使ってたかもな。
2011/09/09(金) 20:44:40.99
俺的にはパターンマッチ、再起、部分適用、ユニットオブメイジャー、モナド含め、コードが書きやすいから。
2011/09/09(金) 21:42:20.97
>>171
インテリセンスさいこーってことでしょ
まー.NET的にC#が勝ち馬であるとに異論はない
いまんとこ

>>173
Javaも別に糞じゃないと思うが
古臭いならわかる
2011/09/09(金) 22:58:15.35
C#使っててLINQと拡張メソッドとラムダだらけになるとなんかもやもやしてくる
179sage
垢版 |
2011/09/09(金) 23:36:12.15
C#でLINQと拡張メソッドとラムダ使ってドヤ顔カッコワルイwwww
2011/09/09(金) 23:46:26.26
まあ、でもLINQの範囲のデータ処理はC#のほうがいいな
2011/09/10(土) 00:09:06.90
Start F#
http://slideshare.net/osiire/3-8660480
2011/09/10(土) 00:09:37.07
bleisさんフォローしておけばいいんじゃね?
2011/09/10(土) 07:03:34.56
>170 意味不明だったけど、これってFortran#っていうネタか。
2011/09/10(土) 13:36:11.11
外人フォローしたほうがいいよ
2011/09/10(土) 14:18:54.64
>>184
リストくれ
2011/09/10(土) 16:20:27.90
ボスは、アカウントあるけどつぶやかなかった気がするな
2011/09/13(火) 21:07:32.69
>>186
ボス?ドンサイム?
2011/09/15(木) 23:23:01.45
F#3.0
http://blogs.msdn.com/b/fsharpteam/archive/2011/09/14/f-3-0-developer-preview-now-available.aspx
バージョン1分差があるのか分からんけど3.0
win8+vs2011expと違って、msdnのサブスクリプションが必要?

追加点
F# Information Rich Programming
- F# LINQ Queries
- F# Type Provider mechanism
- a set of built-in type providers for enterprise and web data standard
IDEサポート増えるみたい。
2011/09/16(金) 09:23:30.60
ファンクタ対応したのかな
2011/09/16(金) 11:56:24.12
従来交わることのなかった OCaml 使いと C# 使いがそれぞれ別の切り口で文句を言いに集うスレはここですか?
2011/09/16(金) 13:05:24.76
>>190
仕事で両方使ってる人は、期待することはあっても文句はいわんだろ。

P層C#、F層F#でそれなりの規模のもの作ってみると、結構使える手ごたえはある。

普通にF#で機能を一つ作った後、その中で理論的に並列動作できそうなところがあれば、
それをマルチスレッド化するのに数分の作業で済むことも多いし、それがいつも安定して動く
という経験を重ねると、これからの時代C#だけじゃだめかなという気にもなってくる。

まだ立ち上がって数年の言語だし、捨てられないでちゃんとバージョンアップしてくれてるから、
まだまだこれからと見るべきでしょう。
2011/09/16(金) 17:08:03.30
Type Providerってなんなのか教えて下さい
2011/09/16(金) 17:10:27.45
型を定義することなくデータソースから何らかの方法でメタデータを取得し静的な型として扱えるようにするものって感じかの。
2011/09/16(金) 17:31:00.24
>>193
ありがとうございます
型定義を手で書かなくても済むようにするための
メタプログラミングの仕組み、みたいな感じでしょうか。。。
2011/09/17(土) 00:34:37.50
What's New for Visual F# in Visual Studio 11 Developer Preview
http://msdn.microsoft.com/en-us/library/hh370982(v=VS.110).aspx

msdn Libraryのなかに、VS11のドキュメントがもう揃ってるんかー
2011/09/17(土) 04:22:38.42
Visual Studio 11 Developer Previewは、日本語版もあって2012年6月30日まで使えるのか。
http://msdn.microsoft.com/en-us/aa570309#five

> Metroスタイルのアプリケーションを開発するには Windows Developer Preview with developer tools English, 64-bit上に
> Visual Studio 11 Developer Previewがインストールされている必要があります。
開発ツール付きWin8上にインストールすればMetroスタイルアプリ開発にF#も使えそう。
197775
垢版 |
2011/09/17(土) 09:34:30.73
Twitterで上がった話題(iOSでF#)で、F#のSymeがMonoのIcazaに、
build会場周辺でちょっと合って話さんかとかやってる。
2011/09/18(日) 07:06:06.41
F# 3.0 Quick Preview
http://www.slideshare.net/igeta/fsharp-langupd-fpm2011
2011/09/18(日) 09:43:03.31
C++のようなメタプログラミングができるのですか?
2011/09/18(日) 14:25:45.62
C++ の template みたいなマクロの延長のものじゃなくて、
ビルドプロセスをフックして型を作ってるんじゃないかな。
そっちも .NET (F# 含む)で書ける。
2011/09/20(火) 10:58:50.53
VS11 DP(ja)を、Win7(ja)とWin8 PR(en)にインストールしたが、VSからのF#(3.0) Interactiveが
どちらも日本語で表示しようとして文字化けしてる。(その画面だけ多国語対応してない?)

「C:\Program Files (x86)\Microsoft SDKs\F#\3.0\Framework\v4.0\Fsi.exe」を直接起動すると
win7(ja)で日本語、Win8(en)英語で正常に表示された。
2011/09/20(火) 13:06:00.07
MetroAppのソリューションテンプレート用意されてなかった。
さすがにリリース前あたりには、用意されるとおもうが、、

とりあえずWP7と同じようにギャラリーに来るのかな
http://blogs.msdn.com/b/dsyme/archive/2010/08/20/f-windows-phone-7-silverlight-templates-now-on-visual-studio-gallery.aspx
2011/09/23(金) 17:42:48.27
>>191
いまだに手応えとか、いつまでそんなこと言ってんだよ
一生前衛みたいな感じかw
204デフォルトの名無しさん
垢版 |
2011/09/27(火) 04:47:47.07
ScalaとF#と両方勉強しているのですが、
判別供用体(代数的データ型)の、パターンマッチについて教えてください。

Scalaでは、case class で定義すると、内部的には、class 定義に、applyやunapplyメソッドを持たせて、オブジェクトに対してパターンマッチを行っているようです。

F#の場合は、どんな感じでしょうか? F#の判別供用体も、実際はクラスから作られたオブジェクトなんですよね?? (.Net言語だから、そう考えたんですが。。)
そうすると、Scalaのapplyやunapplyに対応するメソッドを持ったクラスなんでしょうか?

教えてください、よろしくお願いします。
2011/09/27(火) 05:03:40.46
Scalaのapply,unapplyはよくしらんのだけれど、F#では各共用体は派生クラスとして実装される。
各々Tagを持ってるのでパターンマッチはそのTagを見てると思う。
206デフォルトの名無しさん
垢版 |
2011/09/27(火) 05:21:39.52
夜遅くに(朝早くに)ありがとうございます。
なるほどクラスとして実装されているんですね。
type A =
| B
| C
| D

だと、派生クラスB、C、Dが定義されていて
たぶん、スーパークラスとして、クラスA とか定義されているんでしょうか。(クラスAでなくてもよいとは思いますが)

もし、クラスAだとすると、このクラスAにもTagを定義するように定義されていると思いますが、
クラスAは、.Netというか、F#のクラス的には、もともと何クラスなんでしょうか?


ちょっと、質問がわかりにくくてすみませんが
たとえば

let hoge:A = B
とか、書いた場合に、
変数 hoge の束縛している、クラスが何かって、得る関数ありますか? という質問がしたいです。
(判別供用体のBを返すのでなく、元のクラスが何か? を得る関数という意味です。)
2011/09/27(火) 13:01:19.65
F#の中では知らん。
Reflection使ってbaseクラスたどってみては。
C#から見ると多分Aとして見れると思う。
2011/09/27(火) 13:14:29.26
普通に
type A = | B
hoge.GetType().Name
;;
でAって出てきた
2011/09/27(火) 13:20:04.19
type A =
| B
| C of int
let hoge = C 10
hoge.GetType().Name
;;
はCだった
210206
垢版 |
2011/09/28(水) 14:57:18.94
みなさんありがとうございます。
自分なりの理解はこんな感じになりました (↓素人理解です)

F#のレベルでは、
判別共用体と、クラス・オブジェクト は全く別のもの。

CLRレベル(.Netレベル)ではたぶん、同じような仕組みで実装されている。

一方、
Scalaは、いわゆる判別共用体は、クラスの拡張で実現されているように思います。
(applyやunapplyというものを定義したもの)

※ 素人の理解ですが。
2011/09/28(水) 15:07:34.34
>>210
ProgramingF#のC#Interropの章にF#で定義したunionがC#だとどういうクラスとして定義されるか出てるから見てみるがヨロシ。
webでもどっか転がってそうだけど。
212デフォルトの名無しさん
垢版 |
2011/09/30(金) 22:37:54.99
実践F# を読んでいると、
OOPの章のP264に、
本書では、詳細に踏み込みませんが、レコードや判別共用体の定義とは、F#コンパイラが構造的な性質
を持つように特別なパターンを適用したクラスとして生成するものです。本節では、特別なパターンが施されな
い、生身のクラスを定義する方法を示します(リスト8‐5)。

と書いてあって、F#ではクラスの特別なものが、判別共用体や、レコードのようなきがする。
2011/10/01(土) 06:37:51.43
特別なクラスというと語弊がある。
MSIL上は継承関係とか種類を表すタグとかが一定ルールに従っているただのクラスであり、其れが自動生成されているだけ。
2011/10/12(水) 10:06:47.51
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

46位か…… なんかえらい順位下げちゃったね。何でだろう。
2011/10/12(水) 14:56:32.45
1%切ってるところは誤差だろ。
2011/10/12(水) 18:43:17.12
TIOBEみたいな腐れ調査機関とか相手にすんなよ…
2011/10/22(土) 20:48:19.24
まあ、F#が20位以内というのはおかしいよね。
218デフォルトの名無しさん
垢版 |
2011/10/23(日) 03:15:14.94
しかしそれでもScalaより上って・・・・・目くそ鼻くそとはこのことか。

はやくJavaの時代終わらないかなぁ・・・・
2011/10/23(日) 12:42:45.14
>>218
scalaは関数脳に慣れてない人からは関数型言語部分に苦しんで、haskellやOCamlで関数脳になった人からは関数型言語としてはキモイから。。。

F#Express出たらかなり差が付くだろうね

haskellもGUIに特化した専門書とか出ないと伸びないんだろうな。。。
2011/10/23(日) 14:20:16.52
>>219
haskell でguiな本書こうか?
2011/10/23(日) 14:21:36.40
>>220
ぜひ!!
2011/10/23(日) 14:52:33.37
>>221
gtk2hs でもいいっすか?
haskell-qtはまだ使ったことないんです、、、
2011/10/23(日) 15:04:38.88
>>222
自分もgtk2hsの勉強始めたばかりなんで、渡りに船です
2011/10/23(日) 19:13:01.51
>>223
とりあえず開始するかもしれないです。
でも期待はしないでください、、、、
2011/10/23(日) 20:00:06.22
>>224
うい
2011/10/23(日) 20:32:16.83
たぶん原稿の成長とcarettahのコード品質は同期するだろー...λ
2011/10/26(水) 23:09:18.46
よく知らんが買わんぞ?
2011/10/27(木) 09:05:20.27
>>227
全く売れないのも面白いのでwwww
2011/11/09(水) 16:59:13.93
>>220
書いて
2011/11/09(水) 17:17:18.28
現在の購入予定者2名
2011/11/09(水) 19:01:13.54
良い本だったら買うし良い本ではなかったら買わない
2011/11/09(水) 19:04:24.86
>>231
同人誌レベルなら、、
2011/11/11(金) 03:51:46.57
>>220
買います
2011/11/11(金) 04:23:18.13
>>220
SOEより凄いなら買う
2011/11/11(金) 13:59:41.00
https://github.com/fsharp
githubに、fsharpオープンソースコミュニティーというのがあるのか。
donsymeがいると公式感があるな。
mono開発者のicazaも入ってる。
F#はClojureCLRと違って余裕あるからか、monoとの互換性も重視してたの思い出した。
2011/11/11(金) 14:04:43.63
http://wizardsofsmart.net/post/iteratee-in-f/
最近FPではやりのIteratee使った関数型っぽいIO作り始めたよという記事?

future-io
https://github.com/fractureio/fracture

fsharpxってのがあるのか。
scalazとはまた違う?
https://github.com/fsharp/fsharpx
2011/11/11(金) 14:18:47.50
作ってるのはSocket IOだった。
Fracture/Pipelet/Frackって分かれてる。
future-ioはSSDだった・・・orz
2011/11/14(月) 01:37:08.30
M$がhtml5の構想に弱音を吐いて.net戦略を撤退したらf#ってどうなるんだろ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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