2012年3月プログラム20: 【.NET】F#について語れ2【OCAML】 (285) TOP カテ一覧 スレ一覧 2ch元 削除依頼
【至急】助けてください。 (231)
CPPUnitについて少し話そうかい (282)
COM (295)
なぜ、 = が 代入 を 表す 記号 に なったか? (568)
C/C++の宿題片付けます 156代目 (769)
Androidプログラミング質問スレ Part20 (488)

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


1 :11/05/01
MSResearchから出てきた.NETで使える関数型言語のひとつF#
OCAMLの流れを汲むこの言語、いろいろと面白そうなことができそう。
そろそろ日本語の情報が充実してきそうなこの言語について、幅広く語れ。
http://www.fsharp.net/
前スレ
【.NET】F#について語れ【OCAML】
http://hibari.2ch.net/test/read.cgi/tech/1186030985/
関連スレなどは >>2-

2 :11/05/01
- Try F#
http://www.tryfsharp.org/
- F# Documentation
http://msdn.microsoft.com/library/dd233154(VS.100).aspx
- F# Microsoft Research Site
http://research.microsoft.com/fsharp/fsharp.aspx

3 :11/05/01
>>980ぐらいで新スレを建ててね。
注意事項 http://info.2ch.net/wiki/index.php?%C7%A6%CB%A1%C4%A1%B4%AC%CA%AA

4 :11/05/01
Windowsでのインストールは、>>1から
Mac/LinuxでF#を使うにはmonoが必要です。
http://mono-project.com/
IDEにMonoDevelopを利用するなら、現時点ではmono-2.6系が必要です。
mono-2.10.1以降でF#が統合されていますので、IDEが必要ないならそのままCLI環境が使えます。
なんにせよ茨の道ですので、まずはブラウザ環境で実行できるTry F#のTutorialsを試しましょう。
Windowsでも(C#やCと組み合わせるなら、VS2010 C#/C++ Expressと) VS2010 Shell、F#2.0を組み合わせた
無償のIDE環境が使えます。

5 :11/05/01
現在の最新版について
http://blogs.msdn.com/b/fsharpteam/archive/2011/04/22/update-to-the-f-2-0-free-tools-release-corresponding-to-visual-studio-2010-sp1-april-2011-ctp.aspx
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6b598327-9748-4052-884a-6ee737380dcd
・必要用件
サポートするOS:
Windows 7;Windows Server 2003;Windows Server 2008;Windows Server 2008 R2;Windows Vista;Windows XP
必要な環境:
.NET Framework 2.0 or an equivalent CLI implementation(Xbox 360, and Mono on Mac, Linux and other platform).
対応するソフトウエア(オプション):
Visual Studio 2010 Shell

6 :11/05/01
>>1


7 :11/05/01
言語の特徴としてはScalaとF#はそっくりだと思う。
*型推論:
 F#,Scala -> ◯
 C#,Java -> △,×
*代数データ型:
 F#,Scala -> ◯
 C#,Java -> ×
*パターンマッチ:
 F#,Scala -> ◯
 C#,Java -> ×
nullの廃止
F#,Scala -> ◯
C#,Java -> ×
モナド:
F#,Scala -> ◯
C#,Java -> ×
高階関数:
F#,Scala -> ◯
C#,Java -> △,×
変数:
F#,Scala -> デフォルトで破壊できない
C#,Java -> デフォルトで破壊できる
対話環境:
F#,Scala -> ◯
C#,Java -> ×
JavaからScalaへの大移動が始まっているのと同様のことがC#からF#に起こるに違いない!と言うのも本当かもしれない。
---------
要望があったやつ追加

8 :11/05/01
>>7
名古屋ではF#が結構使われているという話を聞いたんだけど、やっぱり
自動車関係の仕事が多いからなのか?

9 :11/05/01
http://www.itpl.co.jp/ocaml-nagoya/
これが関係してないか?

10 :11/05/01
名古屋怖い(´・ω・`)

11 :11/05/01
>>2, >>4 TryF# もよいけど、Silverlight入れたくない人やsmart phoneな人は
IdeOneも使える事を知っとくと良いよ。
hello worldを書いてみた。
http://ideone.com/ze0wq (こうやってソースと実行結果を貼ることもできる)

12 :11/05/01
コード共有するのには、IdeOneみたいなサービスがいいけど、
F# InteractiveのWebコンソールとしては、これが便利かも。
Try F# in your web browser
http://tryfs.net/

13 :11/05/02
そもそもなんでF#はF#という名前になったの?
FはFunctionのF?
あとC#がC++++から#になっているのは理解できるけど、
F++はもちろんF言語なんて聞いたことがないんだけど。

14 :11/05/03
C#の名前を結構気に入ってたから、.NET言語になんでも#つけてた時期がある。

15 :11/05/03
>>13
j#の後釜だからじゃね?
fは探せば有りそうだし

16 :11/05/03
J#がでた段階か分からないけど、[A-Z]#なら.net用言語に見える
MSに関係する範囲では、C#,F#,J#のみっぽいけど。
http://en.wikipedia.org/wiki/List_of_CLI_languages

17 :11/05/03
>>16
schemeが#Sなのにcommon LispがL#な所は狡猾さを感じるなw
宗教論争とか起きなかったんかね

18 :11/05/03
結構粘ったやつも2009年ぐらいにメンテナンス止まってるみたい。
lisp系でメンテナンスが続いてるのは、結局Clojure(CLR)らしい。
https://github.com/richhickey/clojure-clr/downloads

19 :11/05/03
F#で標準入力を遅延リストみたいに扱う方法ってあるのでしょうか?

20 :11/05/04
ファイルの例だけど。
http://books.google.com/books?id=NcrMkjVxahMC&lpg=PA270&ots=pln0IBigeG&pg=PA99#v=onepage&q&f=false
Expert F#2.0 p.99 seq下のほう

21 :11/05/04
F# 1.0の書籍だった。
F#2.0 は、こっち。
http://books.google.com/books?id=y3kaQxIns0oC&lpg=PP1&pg=PA96#v=onepage&q&f=false

22 :11/05/04
>>20 >>21 ありがとうございます。

23 :11/05/06
RT @igeta: 翻訳ありがたい。/「あなたの開発チームに F# を持ち込むリスクについての神話」 http://bit.ly/k8ZDo1 (by @finalfusion) #fsharp

24 :11/05/09
scalaとF#使うならどっち?

25 :11/05/09
>>24
MSならF#、それ以外ならScala。
構文は全然違うけど言語パラダイムはそっくりだから俺は両方勉強してるぜ。なかなかためになる。

26 :11/05/09
誰かC#とF#の比較してくれねーかなー

27 :11/05/09
違いすぎる→そんなに違わないな→やっぱ違うわ→まあ、同じとも言えるな。こんな感じが延々と続く。C#とF#の比較。

28 :11/05/10
>>26
>>7 に書いてある。

29 :11/05/10
>>7の「高階関数」でC#が△になってるのはなんか理由あんのかな
っていうか、「ファーストクラスの関数」でよくね
tail call elimination
nested functions
automatic currying
cons, tuple
list comprehension
あたりも比較項目につけくわえていい気がする

30 :11/05/10
bingでF#検索すると残念なことに・・・

31 :11/05/10
>>7
そっくりなところを比べればそりゃそっくりだろうさ

32 :11/05/10
>>29
*tail call elimination
Java,C# -> ×
Scala,F# -> ○
*nested functions
Java,C# -> ×,△
Scala,F# -> ○
*automatic currying
Java,C#,Scala -> ×
F# -> ○
*cons, tuple
Java,C# -> ×
Scala,F# -> ○
*list comprehension
Java,C# -> ×
Scala,F# -> ○

33 :11/05/10
Actorモデル
Scala->○
F#->○に近い△
C#,Jave->×
って感じ?ちょっと不勉強なので正確かわからん。

34 :11/05/10
>>32
Scala は JVM の制限とかで tail call elimination ができないときがあるような
@tailrec アノテーションをつけておけば、できかなったときは教えてくれるけど
Scala は list comprehension あるんだっけ
for 式だったら、あれはどちらかというと Haskell の do に近いような

35 :11/05/11
>>32
tail callは64ビット版.NET Framework は、ILがTailとマークしてなくても最適化してくれる(制限あり)。
あと、LINQはある意味list comprehensionsの一種なので、C#が×は納得いかない。

36 :11/05/11
>>35 LINQでlist comprehension できるのか。知らなかった。
Haskellでの[x+y | x <- [0..9], y <- [0..9], x<y] みたいなのもLINQを使えば書けるのか?

37 :11/05/11
LINQだと
from x in Enumerable.Range(0, 10)
from y in Enumerable.Range(0, 10)
where x < y
select x + y
とかそんな感じだろう

38 :11/05/17
だれかF#でMonotouch開発しようとしてる人とかおらん?(´・ω・`)
F#にMonotouchが対応するのって、そもそも技術的に難しいんだっけ? Dictionary<int,Hoge>とかを使えないとかの制限にからんで。
それともF#なんかマイナー言語相手にしてる暇ねーぜヒャッハーってだけ?
FSharp.CoreとかのライブラリーをILAssembly使ってターゲット変えてゴニョゴニョすれば動くようになるとか言ってる人もいたんだけど。
Silverlightで同じようなことしてる人のBlogあったんだけどリンク切れちゃってた。
暇な人は"Reusing-NET-Assemblies-in-Silverlight"でぐぐって最初のエントリーのキャッシュ見てくんなまし。

39 :11/05/18
monoは今レイオフされたり会社設立したりと本体がゴタゴタしててそれどころじゃないんだろ

40 :11/05/18
>それともF#なんかマイナー言語相手にしてる暇ねーぜヒャッハーってだけ?
被害妄想?

41 :11/05/18
Mono for AndroidよりMonoTouchのが制約きついみたいだね。
http://d.hatena.ne.jp/atsushieno/touch/20110407/p1 の最後の段落

42 :11/05/26
しかしまあF#ってScalaほど必要とされている感がないんだよなー
なまじC#がよくできてるから

43 :11/05/26
企業の後ろだてのある言語じゃなく、1研究社が作った言語が注目集めるとかおかしいだろ。
どんだけJavaはアレなんだよ。

44 :11/05/26
>>42 確かにScalaは多くのJava技術者に注目を浴びているけど、Scalaいいって
言う人の言うことはそのままF#にも当てはまるんだよね。
ScalaがF#に比べて人気ある理由はC#がJavaより良くできているという以外に
構文がJavaから大きく離れてはいないという点があると思う。Javaコードを
コピペして微修正すればScalaコードとして動くし、Scalaコードを見てもある程度
読めそうな気になるから移行しやすいんだよね。

45 :11/05/26

一方F#は構文が違いすぎるし、初見だと全然読めない。このとっつきにくさが
結構効いているんじゃないかな。
でもF#は関数型言語としてScalaよりずっといい線行っている(構文はキモいけど)
ので、Scalaへの大移動が現実になったときC#erはF#への移動を準備すべき。
C#erがレガシーな理由のみで残りつづけて老害とならないようになってほしい。

46 :11/05/26
ScalaはGood Java。Javaに取って代わることを目標としているマルチパラダイム言語。
F#はあくまでもC#の補完。.NETファミリーの関数型言語の位置づけ。
scalaは関数型的な使い方をしなくてもいろいろ遊べる。
最初の関数型言語にScalaを選んでしまった場合、
Good Javaの部分だけで腹いっぱいになって関数型までたどり着けないことが多い。

47 :11/05/26
Scalaは、未来のJavaを先取りした言語と表現してるが、
Scalaと同じ機能がある未来のJavaは構文がもっと複雑なんだろうな。

48 :11/05/27
Scalaは関数型ってだけじゃなくてオブジェクト指向言語としてもJavaより進んでるのがウケてる理由の一つの気がするな

49 :11/05/30
C#もまだ未熟なんだけどF#に手を出してみたよ!!
で、F#難し過ぎて、はやくも挫折しそうなんだけど・・・
ちょっと質問。
クラスのスコープ内に関数を定義したかったらC#の場合、こうできる。
class 振り分け{
double[] ratio;
public 振り分け(){
initRatio();
}
private initRatio(){うんたらかんたら}
}
同じことをF#でやる場合staticなメンバにしないといけないのかな?
type 振り分け=
class
val mutable ratio: float[]
static member initRatio=うんたらかんたら
new(){ratio=initRatio}
うーん、ようわからんwww

50 :11/05/30
F#の嫌なところを1個見つけたよ。
インデント?空白?によって
ブロック的なものが決まることかなぁ。
だから、必然的に自動整形ってできないんだよね?
複数行選択後のtab/shift+tabができなかったら、
発狂するレベルだねw
あとは、クラスを定義する時の修飾子の多さも、ちょっとうんざりだよね;;
どういう書き方が一番エレガントなんだろう・・・
関数を定義する順番に依存しちゃうってのも、なんというか・・・
そこら辺はやっぱりscalaの方が上っぽい?

51 :11/05/30
>>50
・オフサイドルールはうつくしい。まだまだシロートのようだな
・クラスあんまし書かないのがF#流だから木にスンナ
・偽関数型言語でよければScalaでおk

52 :11/05/30
>>51
カッコよりはインデントの方が良いとは思うが・・・
自動整形欲しいよorz
クラス使わないって厳しくない?
Scalaのどの辺が偽なの?F#も偽だと思うけど。

53 :11/05/31
>>49
type Foo() =
    let initRatio() : float array = Array.map ( (*) 2.0 ) [|1.1;2.2;3.3|] 
    let mutable ratio = initRatio()
    member x.Say() = printfn "%A" ratio
let _ =
   let foo = new Foo()
   foo.Say()

54 :11/05/31
namespace Algebra
type Vector(elements: float[])=
member this.size=elements.Length
member this.elements=elements
member this.Item
with get i = elements.[i]
member this.squaredNorm=Vector.dot(this,this)
static member (~-) (v: Vector)=
new Vector([| for i in 0 .. v.size-1 -> -v.[i] |])
static member OP2 (v1:Vector) (v2:Vector) op=
new Vector([| for i in 0 .. v1.size-1 -> op v1.[i] v2.[i] |])
static member (+) (v1: Vector, v2: Vector)=
Vector.OP2 v1 v2 (fun x y -> x+y)
//new Vector([| for i in 0 .. v1.size-1 -> v1.[i]+v2.[i] |])
static member (-) (v1: Vector, v2: Vector)=
Vector.OP2 v1 v2 (fun x y -> x-y)
static member (.*) (v1: Vector, v2: Vector)=
Vector.OP2 v1 v2 (fun x y -> x*y)
static member (./) (v1: Vector, v2: Vector)=
Vector.OP2 v1 v2 (fun x y -> x/y)

55 :11/05/31

static member (*) (a: float, v: Vector)=
new Vector([| for i in 0 .. v.size-1 -> a*v.[i] |])
static member (*) (v: Vector, a: float)=a*v
static member (/) (v: Vector, a)=(1./a)*v
static member dot (v1: Vector, v2: Vector)=
Array.reduce (fun x y -> x+y) (v1.*v2).elements
override this.ToString() =
"("+(Array.fold (fun (x:string) (y:float) -> x+","+string(y))
(string(elements.[0])) elements.[1..])+")"

56 :11/05/31
インデントが全部消えてごめんなさい。
疑問点
・OP2をletで定義できないのはなぜだろうか?
・intからfloatへの変換は自動でできないのだろうか?

57 :11/05/31
関数型の本質は型推論によって、関数が気軽に定義できることだろうか?
例えばList.reduceはJavaでもC#でも、簡単に実装できる。
だけど、気軽に使うためには、
foldに与える関数を気軽に定義できなきゃいけない。
T arg_reduce(T t, S s)
こういう関数を簡単に定義できる枠組みを与えるのが関数型言語なんだろうか?

58 :11/05/31
>>56
>・OP2をletで定義できないのはなぜだろうか?
以下のページの「let バインディングと do バインディング」が参考になるかも。
ttp://msdn.microsoft.com/ja-jp/library/dd233205.aspx
>・intからfloatへの変換は自動でできないのだろうか?
「プログラミングF#」の「2.1.3 変換処理」に、
「F#言語は暗黙的な型変換を行わないことを1つの方針としています。」
とか書いてあるんで無理なんじゃないかな。

59 :11/05/31
>>58
>静的メソッドからはこのフィールドにアクセスできません。
って書いてありました。ありがとう。
それはそうとdoバインディングってなんだろw

60 :11/05/31
関数型の本質()とかどうでもいいわ。
問題は単にF#が便利なのかどうかだわ。

61 :11/06/01
>>60
クラスブラウザがVSに実装されるまでは大規模開発が難しいのと
GUIエディタが無い現状はC#の代替にはならないかな、と思った。
F#は関数をさくさく作れる。
C#のクラス定義は単純明快だけど、
F#のクラス定義の方法は難解で、冗長で、読みにくいが、改行は少ない。
F#のyieldは便利。F#の()は読みにくい。F#のSeqは美しい。
F#は基本的に読みにくい。

62 :11/06/01
>>61
F#のクラス定義の方法は
難解で読みにくいってのはまあ慣れと好みだが
冗長でってのはどうかね?
C#のクラス定義は単純明快ってのは
私はC#のクラス定義に慣れているんです
って以外に意味を持たない主張に思えるが。

63 :11/06/01
>>62
memberは明らかにいらない子

64 :11/06/01
memberがいらないとか・・・
全然明らかじゃないからkwsk

65 :11/06/01
F#ではfun x y ->x+yをx y->x+yに出来なかった言語仕様上の問題とかあったん?

66 :11/06/01
>>64
クラスを定義してるのが明らかなのだから、
memberという修飾子はいらない。
あと、そもそもletが冗長なのと
副作用がないならnewを省略したい。
下記のようなシンプルさが欲しい。
class A(a:float)
add b = A(a + b)
minus b = A(a - b)
inc = add 1
dinc = this.inc.inc
この場合、IDE側でクラス名と関数名に色をつけてくれないと
クソ読みにくい。オフサイドルールの欠点。
あとandもクソ仕様。

67 :11/06/01
funは正直鬱陶しいなあ。

68 :11/06/01
F#やってて、便利と思うのは
関数の中に関数をかけることだな。
しかも、F#における関数はOOPでいう関数ではなく、
OOPのクラスに相当する。
逆に不便だなって思うことは、共通して使う関数を作った時に
どこへ置けばいいかわからないこと。F#はスコープの制御がダメだね。

69 :11/06/01
>>65
OCaml互換。C#の人かな。\x ->ならまだしもx ->はさすがに無理くねーか。
>>67
気持ちはわかります。
>>66
クラス内にはletとdoもかけるぞ。あとコンストラクタはメンバじゃねえ。
>>68
どこ置けばいいかわからない?F#でだけ?どの言語でも同じじゃまいか。

70 :11/06/01
あと自動整形できないからっての、よくわからん。
整形されたコードしかコンパイル通らんのだから
そもそも整形する必要ないじゃんか。
まあ俺もオフサイドルール嫌いだけど。

71 :11/06/02
オフサイドルールをやめるとすると、
他の選択肢ってなんだろ?
一つは{}だよね。

72 :11/06/02
あれーC#から使う時に、F#のunionの各サブクラスへの変換とかなんかメソッドなかったっけ
FSharpUnion<Employee>.get_Manager的な。
isManagerでしてから普通にキャストすればよかったんだっけ?

73 :11/06/02
>>71
つ Verbose syntax

74 :11/06/02
FSIにnamespaceとかopenて流し込めないんだね・・・
デバッグの途中で
add 1 2
とか打てたらいいんだけど・・・
F#ってデバッグが難しいね;;

75 :11/06/02
>>72
サブクラスとか、キャストとか、なんか根本的に間違ってないか。
>>74
openは流せる。まさかopen Listがエラーだからとか言わないよね?

76 :11/06/02
>>75
あぁ、ごめん。書き方が悪かった。
自分で定義したnamespaceを
openすることができないってことでした。すいません。

77 :11/06/02
>75
いやC#からだとUnionそういう風にしか扱えなくなかったっけ?
そのUnionのインスタンスでIsManagerとかよべるけど。ManagerであるUnion値をManagerとして扱いたいときにどうしたらいいかって話。
もっとまともな方法あったっけ?

78 :11/06/03
>>77
type Employee = ... | Manager of Hoge の場合↓
var emp = Employee.NewManager(hoge);
if (emp.IsManager) {
    var mngr = ((Employee.Manager)emp).Item;
    // dosomething
}
だからDesign Guidelinesにはまんま使うなと書いてある。

79 :11/06/03
誰かF#のいいデバッグ方法教えてー

80 :11/06/03
F#のC#に対して優れているところを教えてください

81 :11/06/03
>>80
協力な型推論、nullがない、パターンマッチ、関数内関数ができる、対話環境、並列計算に強い
とかじゃね。

82 :11/06/03
nullって悪者なんですか・・・
パターンマッチ、並列計算に強い はおもしろそう

83 :11/06/03
>78
あーやっぱりそんな感じかー
>79
自分も最初は悩んでたけど、最近はなんも困ってないな。なんでだろ。途中でうまく止めて値見るのとWriteLineで出しとくのとヘルパーとか使ってFSharpFunc楽に実行できるようにしたところか?
そもそもDebugが必要になる羽目になることが少なくなったというのもある気がするが。
>80
Debugしながらでもソースがいじれるところ。

84 :11/06/03
>>83
Debugしながらでもソースがいじれる・・・イイ!

85 :11/06/03
>>82
実行時エラーがない方が運用上大いなるなメリットがあるのは当然だろJK
quick sortの発明者アントニーホーアはnullは10億ドルの過ちであると言っている。
ttp://news.livedoor.com/article/detail/4047613/

86 :11/06/03
まあ、どんなの場面でもnull不要とはいわないけども、
Anders Hejlsbergも「nullableの概念は参照型/値型の概念とは独立させておくべきだった」っていってるしね。
非nullable参照型は欲しい。

87 :11/06/03
>>86
関数型言語にはnullは必要ないよ。関数型プログラマはnull参照エラーみたいなアホみたいな実行時エラーとは
無縁の世界でプログラムしているよ。

88 :11/06/05
>>83
FSharpFuncってなんですか?
数値計算のプログラムを作ってる時は、
デバッグは絶対必要なんですよね・・・
関数の形で定義してると、途中で止めても
中の数値が見れないんですよねorz
let x=f a
とかしちゃってる時に、
f 1
の値を見る方法がないと、数値計算のプログラムのデバッグは
無理かなーと。
現状のF#を数値計算に使うと死ぬかも・・・・

89 :11/06/05
伝統のprintfデバッグじゃダメ?
let dbg x = printfn "*debug:%A" x; x;;
こんな感じで使う。
[1..10] |> List.map ((+) 1) |> dbg |> List.map(fun x -> dbg(float x / 2.0));;

90 :11/06/05
>>89
%Aでリスト(行列)を全表示できるのかな?
そうなら、そういう関数作っておけば、確かに楽そうだね。
DOS窓かよって不満はあるけどw
それやってみるよ。ありがと。
また、ただ、いろいろ細かい状態が知りたかったりするから
デバッグ中に値が知りたいというニーズは多いし、
あとはけっこう量が多いんだよね・・・うーん。

91 :11/06/05
そういえばVSのデバッガは何だかんだでC#前提なままだったね。

92 :11/06/05
> FSharpFuncってなんですか?
関数の型。クロージャ作るとそゆ型が付く。
まーF#の中にいる限りは特に意識する必要ないが。
C#と連携したいなら覚えておくといいかも。

93 :11/06/07
F#のイディオム的なテクニックを教えてほしいな。
例えば、クロージャーとか簡単なもの。
使い始めたんだけど、上手く使えてるか自信がない。
F#ならではの書き方あったら教えてください。

94 :11/06/07
>>93
LINQは使ったことありますか?

95 :11/06/07
>>94
C#では使ったことがあります。

96 :11/06/07
>>93
関数型の場合何やるにも再帰。
とくに末尾再帰はしっかりみにつけるべき。

97 :11/06/08
>>93
非関数型プログラマ: forやwhileループを使う
関数型入門者: 再起を使う
中級者: map, foldをなるべく使う
これが割と参考になるかも。

98 :11/06/08
>>97
上級者は何を使うんだ?

99 :11/06/08
文字列のlistがあって、その文字列を表示できる矩形を重ならないように上から並べたrectと文字列のタプルのリスト返せっつったら、foldで次のトップと結果のlistを状態にするような感じでよろし?
こういうのにfold使うのなんか微妙に違和感あるんだけれどこんなもんかね@関数型初心者。

100 :11/06/08
>>99 こんな感じ?
let union rect1 rect2 = new Rect(rect1.x, rect1.y, max rect1.width rect2.width, rect1.height+rect2.height) in
ss
|> map (fun s -> getRectOf(s))
|> fold union empty_rect

101 :11/06/08
F#って末尾最適化はやってくれている?

102 :11/06/08
コンパイル時に .tail がつく

103 :11/06/08
F#で文字の連結ってどうするんですか?
+でできるのはわかるんですが、これだと遅いですよね?

104 :11/06/08
いっておくがStringBufferみたいなものはないからな

105 :11/06/08
StringBuilder使えって言っておけばいいのかな

106 :11/06/08
末尾最適化になってるはずなんだがstackOverFlowになるってことはなってないんだろうなぁ・・・何か確認する方法あったっけ。
そもそも要素一つずつ減らしてるから無限ループになるはずないのに4千件ぐらいでStackOverFlowになるってなんか変だ。
Console.WriteLineで出力しても途中まで減ってってるのに突然何も出さなくなって5秒ぐらいしてからStackOverFlowが出てもうわけわかめ(´;ω;`)ブワッ

107 :11/06/09
>>106
コードkwsk

108 :11/06/09
.tailプリフィックス付いてても状況によっては無視されるって奴かな?

109 :11/06/09
あれーインタラクティブに流し込んだらもっとたくさん流し込んでもさっくり動くよ…
そもそもデバッガーだと末尾最適化しないとかあったっけ?いやそんなことないよね…
問題だけどインタラクティブでさっくり動いたコードとりあえずまるっと載せてみる
let inRange from t v=from<=v&&v<=t
//rangeによってポイントをまとめる。
//現在のrange=from〜tに合うならptListに追加。
//合わないなら今までのptListを一組としてptListListに追加し、新しいポイントとしてptListに追加。
//合うrangeがなくなるか、iListが空になったら抜ける。
let rec toPtrListList (ptList,ptListList,((from,t)::rangeList)) (i::iList) indToInter indToVal=
// Console.WriteLine("toPtrLL----{0}",System.Environment.TickCount)
// Console.WriteLine ("toPtrLL iList={0},rangeL={1}",List.length iList,rangeList.Length)
let inter=indToInter i
let toPt()=inter,indToVal i
//System.Drawing.PointF(float32<|trans.XInterToUI inter,toUIY series.[i]|>float32)
//helper-----
//合うrangeを探してそれ以降を返す。
let rec findFitRange rangeList inter=
// Console.WriteLine("findFitR {0}",System.Environment.TickCount)
match rangeList with
|[]->None
|(from,t)::tail->
if inRange from t inter then Some rangeList
else findFitRange tail inter
//iListが空ならその時点のを結果とする。有るなら続き。

110 :11/06/09
//続き
let contOrBreak (ptList,ptListList,rangeList) iList=
// Console.WriteLine ("contOrBreak iList={0}",List.length iList)
match iList with
|[]->[],ptList::ptListList,rangeList
|_->toPtrListList (ptList,ptListList,rangeList) iList indToInter indToVal
// Console.WriteLine("toPtrLL---before helper {0}",System.Environment.TickCount)
//-----helper
if inRange from t inter then
//現在のrangeに合う。
contOrBreak (toPt()::ptList,ptListList,((from,t)::rangeList)) iList
else
//rangeに合わない
if t<inter then
//現在のrangeよりinterが先。
match findFitRange rangeList inter with
|Some (rangeList)->
//fitするものがあったのですすめる。
contOrBreak ([toPt()],ptList::ptListList,rangeList) iList
//なかったので現在のものを結果とする。
|_->[0,0],ptList::ptListList,(from,t)::rangeList
//inter<fromなので今のindを捨てる。
else
// Console.WriteLine ("hogehoge iList={0}",iList.Length)
contOrBreak (ptList,ptListList,((from,t)::rangeList)) iList
let test=
toPtrListList ([],[],[0,10000;10001,20000;20001,30000]) ([0..50000]@[0..100]) id (fun i->i+100000)

111 :11/06/09
インデントが(;´Д`)
let inRange from t v=from<=v&&v<=t
//rangeによってポイントをまとめる。
//現在のrange=from〜tに合うならptListに追加。
//合わないなら今までのptListを一組としてptListListに追加し、新しいポイントとしてptListに追加。
//合うrangeがなくなるか、iListが空になったら抜ける。
let rec toPtrListList (ptList,ptListList,((from,t)::rangeList)) (i::iList) indToInter indToVal=
// Console.WriteLine("toPtrLL----{0}",System.Environment.TickCount)
// Console.WriteLine ("toPtrLL iList={0},rangeL={1}",List.length iList,rangeList.Length)
let inter=indToInter i
let toPt()=inter,indToVal i
//System.Drawing.PointF(float32<|trans.XInterToUI inter,toUIY series.[i]|>float32)
//helper-----
//合うrangeを探してそれ以降を返す。
let rec findFitRange rangeList inter=
// Console.WriteLine("findFitR {0}",System.Environment.TickCount)
match rangeList with
|[]->None
|(from,t)::tail->
if inRange from t inter then Some rangeList
else findFitRange tail inter
//iListが空ならその時点のを結果とする。有るなら続き。

112 :11/06/09
スペースを入れてもダメか。俺\(^o^)/オワタ

113 :11/06/09
htmlレンダリングの問題だけで、スレに書き込まれてるソース的には空白やタブ残ってたと思った。
リンク貼る形式なら、gistや>11の使うといいと思う

114 :11/06/09
>>113
106ではないが、インデントを推測して貼ってみた。F#の構文がわからないので間違ってるかも
ttp://ideone.com/JW8dl

115 :11/06/09
>>106
よくわからんがfindFitRangeは再帰しなくても高階関数使った方がシンプル
let inRange v (from, t) = from<=v&&v<=t
let isFit v ranges = ranges.exists(isRange v)
let findFitRange ranges inter =
if (isFit inter ranges) then Some ranges
else None


116 :11/06/09
>>113の通りで、データとしては空白残ってるよ
俺はnavi2ch使ってるので普通にインデントが見れる
http://ideone.com/eE0C0

117 :11/06/09
>113-116
オマイラあり\(^o^)/
>115
いや、リストをなめていって見つかったらそれと、それ以降のやつをタプルで返してるのでそのやり方だとミリ。
なんかうまい高階関数あるのかもしれんが。

118 :11/06/09
>>117
List.partition : ('T -> bool) -> 'T list -> 'T list * 'T list
ttp://msdn.microsoft.com/ja-jp/library/ee353782.aspx
が近いけどちょっと違うか。
こういう場合は素直に再帰をした方がいいのかな?

119 :11/06/09
>118
それ条件で振り分けるやつだからちょと違うと思われ
というか自己解決したかも。
プロジェクトの設定でビルドタブに"tail呼び出しの生成"って項目あってそれオンにしたらサックリ動いた。
ってもこれ付けたらデバッグとかしにくくなんのかな。
お騒がせしますた。

120 :11/06/09
※補足:
上の何も出さなくなって5秒ぐらいしてからStackOverFlowってのは例外になったのでVisualStudioが表示用とかに色々頑張ってる状態なんだろうね。

121 :11/06/09
末尾呼び出しを最適化すると、関数のトレースが出来なくなる。
だから、デバッグするときは、最適化切ったりするね。

122 :11/06/11
末尾最適化=スタックに積まないだからそりゃね。
でも再帰呼び出し時のスタック トレースが必要なことってある?
printf デバッグでいいんじゃねぇかと思うんだけど。

123 :11/06/11
まぁそれいっちゃうとなんでもprintfデバッグで良くね?ってなるだろw

124 :11/06/11
いやいやwスタックトレースは必要だと思ってるよw
どこからどう呼び出されてきた関数かはデバッグに不可欠
だけど、再帰の分に関しては必要ないんじゃね?って。

125 :11/06/11
んーまぁ再帰でもなんでその条件分岐になったのか流れ見たいときはある希ガスんなぁ
printfでもいいけど。printfでいいか。

126 :11/06/11
俺が想定してたのは再帰するしないで2分岐するだけの単純な再帰なんだけど
もしかするともっと複雑な再帰とかだとスタック見たいこともあるかも。
というかまあ見れる見れないだったら見れる方がありがたいのは確か。
ただ、再帰って、割とこうガチガチにロジカルに組まないとコンパイル通らない
ような気がしてて、スタック追っかけてまでデバッグする必要性あるかなあと
思ったりしたんだわ。

127 :11/06/15
FSUnitとVisualStudioのテストおのおのどんなメリット・デメリットあるのかすら。
C#使ってた時はVSのつと使ってたけどF#だと使いにくい?

128 :11/06/15
>>127
日本語?
母国語で頼む

129 :11/06/15
母国語だとさらにわからないのでは?

130 :11/06/15
中国語と韓国語なら読めるぜ

131 :11/06/16
Alt+EnterでInteractiveに流し込もうとするとエラー音してできない時があるんだけど、そういう現象出てる人います?
ウィンドウ→新規で別ウィンドウ出すとそのソースからでもできるんだけどいまいち発生する条件がわからん。

132 :11/06/16
結局TypeProviderってちょっとMeta情報与えてやることでF#でいろいろな情報がナイスに楽に使えるようになるってことでいいですか?(´・ω・`)
http://research.microsoft.com/apps/video/dl.aspx?id=150053&l=i

133 :11/06/18
オブジェクトのXML相互変換、こんな感じに書けたよ( ・∀・)ノ
F#いいね。
http://ideone.com/IokO4

134 :11/06/24
(・∀・)
Barrier使うぞ
http://blogs.msdn.com/b/mcsuksoldev/archive/2011/06/15/f-array-parallel-sort-functions-demonstrating-a-merge-sort-using-barrier.aspx
最近MCS UKの記事が多くなったけど、
MSR UK?から、だれか移ったのかな?

135 :11/06/27
関数内で途中でreturn みたいに値を返したり
for内でbreakしたりしたいんですがどうやればよいですか?

136 :11/06/29
>>135
自分の場合はtryFindかtryPickかな。
どうしても途中で抜けたいなら、例外出して抜けるしかない。
自分もC++のコードをF#にしてみようと思ったときそこで悩みました。
結局、F#の繰り返しのfor文は全然使わないでList.mapかList.iterで処理するのがいいと思った。

137 :11/07/01
>>135
>関数内で途中でreturn みたいに値を返したり
条件で返す値を変える
>for内でbreakしたりしたいんですがどうやればよいですか?
手続き型のfor/whileは全て再帰だと思っていい

138 :11/07/02
そこで継続ですよ。

139 :11/07/02
>>136-138
レスありがとうございます.
let loopですっきりとした記述ができました.

140 :11/07/05
2011年、Ruby,Perl,PHP,Pythonって並べたときにさ
ここで、Ruby以外を選ぶ奴ってマジでなんなんだろうな
ゴミだし

141 :11/07/05
これ ; デリミタっていうんだけどさ、これをつけなきゃエラーになるような
そんな言語使ってる奴ってどうみてもゴミだと思うんだけど
もしかして「;」これ打ち忘れてコンパイルエラー出すのが楽しいの?
そうか、二度と話かけんなよ
ゴミの分際でw

142 :11/07/10
つ #light

143 :11/07/12
コード見てないが、意外とF#遅くてがっかし(´・ω・`)
http://users.softlab.ece.ntua.gr/~ttsiod/score4.html

144 :11/07/17
誰かseqのBuilderを実装しているソースどれかわかる人います?
2.0のソースはあるんだけど検索してもわからんです…

145 :11/07/17
>>143
コード見ようや・・・
http://d.hatena.ne.jp/einblicker/20110712/1310476340

146 :11/08/07
TIOBE TOP20入りしてた
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
msdnでドキュメント公開してるのも大きいんだろうな

147 :11/08/20
F#って何がいいの?
って言う人には
http://www.slideshare.net/bleistift/cvbf
これを見るといいかもね?

148 :11/08/20
あとこの辺も見ておくと
勉強になるかもね?
http://d.hatena.ne.jp/bleis-tift/20110803/1312345593

149 :11/08/20
>>147 >>148
なってないなぁ…と思う。
そんなもん見るよりも、ちゃんと時間取って実践F#読む方がずっといいよ。

150 :11/08/20
>>149
なってないなぁ…と思う。
そんなもん見るよりも、ちゃんと時間取ってExpert F# 2.0読む方がずっといいよ。

151 :11/08/20
Real-World Functional Programmingも宜しくね

152 :11/08/20
ちなみに何がなってないの?

153 :11/08/21
>>152
突っ込むために見直してみたら、そんなに突っ込み所は無かったかも。
>>149で頭ごなしに否定するのはまずかった。反省してる。
初見ではもっと気になる所があった気がしたけど、今見て思うのは以下。
・P35-P43 if式を(.NET中では)F#に特徴的、みたく書いてるけど、実はVB.NETにもif式はあるのです…
・P85 高性能、ではなくて、高機能、では?
・タプルを使ったPythonでいうアンパック代入相当の構文を備えていて、
 多値関数の戻り値が(x,y) = funcHoge(a,b)みたいに自然に書ける説明が抜けてる。
・リスト操作用の組み込み高階関数の説明が無い。
とか。重箱の隅かもしれんけど、気になるんよ。

154 :11/08/21
質問させてください。
ここ数ヶ月、関数型言語をいろいろ見ています。(Scala,Haskellなど)
実践F#という本を読んでいます。
ちょっとこういう場合どうすればいいか、わからないことがあり質問させてください。
あるレコードが定義されている場合、
そのレコードに対して適用できる一連の関数を知る方法ってありますか?
実践F#には、同じ名前空間に、レコードと同じ名前のモジュールを定義して、
そこに関連する関数を書くとよい、とされていますが、
実際そうされているものでしょうか。
一つに、Haskellの型クラスのような仕組みがあれば、見通しがよくなると思うんですが
そういう仕組みはないんですよね? (Scalaにもなかった。。)
なにか、自分で設計する場合、他人が見てもわかりやすい方法などあれば教えてください。
よろしくお願いします。

155 :11/08/21
レコード型のメソッドにしてみてもいいんじゃないでしょうか

156 :11/08/21
>>154
ある型に対する一連の関数を知る方法は、簡単にはないですね。
AppDomainをリフレクションで総舐めとかすればそりゃ別ですが。
型と同名のモジュールを作ってーというお作法は、まあ、ふつうはそうするかなあと。
もちろん、ふつうじゃない場合もあるわけだけど。
Haskell型クラスが美人なのはわかりますが、すでにインターフェイスで筋通してる
.NET(あるいはJVM)においてそれを求めるのは、ちょっと難しいかなあという感想。
>>155
関数型でなくOOPで、と。ええ、おっしゃる意味は解りますが、といって、たとえば
Fooオブジェクトを必要とする振る舞いがすべてFooのメソッドとして定義されるとは
限らないわけで。BarクラスのメソッドがFooを引数に取ることだってあるでしょう。
このあたり、私は、F#においてのみ特別不便だ、とは感じません。

157 :11/08/21
> 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には一対一で対応するものが無いような高階関数の紹介はやってもよかったかもしれません。

158 :11/08/21
あ、let { Name = n } = xです。

159 :11/08/24
お!本人であるbleisさんが降臨・・・
素敵!

160 :11/09/07
F#のすごい日本人おしえれ

161 :11/09/07
いますぐフォローすべきF#の人的なやつ

162 :11/09/07
Googleで F# site:hatena.ne.jp とかやると、いろいろ出てくる

163 :11/09/07
いないんだな、それが
というとアレだが、F# に特化してる人っているかね?
なにかしらほかの言語も使いつつ F# も嗜む的な
リベラルというか

164 :11/09/07
金融系の人とかはOCaml使ってた人も多いらしいし、
F#も出来る人多いんじゃないの?

165 :11/09/08
完全にF#で仕事、というのが日本にはない感じなので、そういう点で、人が見えないよね。
小物やらバッチに使うやらぐらいなら、そりゃあるだろうけれど。
かといってF#で何かOSSで作って公開、などという人もいないようだし。

166 :11/09/08
>>165
え?
ttp://d.hatena.ne.jp/taedium/20110604/p1

167 :11/09/08
F#セミナーいったら、
GUIアプリクライアントをF#で開発して納品した話をしてたよ。

168 :11/09/08
活用例とかになれば
最終的には.netのグルー言語以外の何でもねえんだし
scalaにしろ、元にくらべての使い勝手の話になるんだから面白い話じゃない
.net嫌いな人ってもういないの?
>>160>>161
それなら各言語のすごい人全部まとめれ

169 :11/09/08
F# Programming -Build MVVM Applications in F#
msdn magazine Sep. 2011
http://msdn.microsoft.com/ja-jp/magazine/hh394149(en-us).aspx

170 :11/09/09
会社にFランがいたけどひどかった。
#なんか付けたところで同じようなもんだろ。

171 :11/09/09
Javaのの人たちはScalaやってるのに、
なんてC#のの人たちはF#やんないの?

172 :11/09/09
Javaは使いづらくてやっとレンガ、C#はそこそこ間に合ってしまうというのがあるんじゃ。
F#のほうが使いやすいけどねー

173 :11/09/09
Javaと違ってC#は糞言語じゃないから。
C#にはラムダ式、まともなジェネリック、LINQがあるし、
次のバージョンではasync,awaitも入るのでF#のメリットが相対的に少ない。
また、F#はC#と比べてIDEの支援が弱いのというデメリットがあるので
(特に WindowsForms、WPF、ASP.NET MVCなど主要ライブラリ関連)
F#のメリットとデメリットを天秤にかけた結果、C#でいいやって事になってしまう。

174 :11/09/09
むしろここの人たちがF#を使っている理由が知りたい

175 :11/09/09
C#を使ってると「パターンマッチ使いてぇ」
って場面は割とよくあるんだけど、
それだけの為にユーザーの環境にF#ランタイムを入れさせるのは憚られたので
結局使ってない。
.NET FrameworkにF#ランタイムが含まれてたら使ってたかもな。

176 :11/09/09
俺的にはパターンマッチ、再起、部分適用、ユニットオブメイジャー、モナド含め、コードが書きやすいから。

177 :11/09/09
>>171
インテリセンスさいこーってことでしょ
まー.NET的にC#が勝ち馬であるとに異論はない
いまんとこ
>>173
Javaも別に糞じゃないと思うが
古臭いならわかる

178 :11/09/09
C#使っててLINQと拡張メソッドとラムダだらけになるとなんかもやもやしてくる

179 :11/09/09
C#でLINQと拡張メソッドとラムダ使ってドヤ顔カッコワルイwwww

180 :11/09/09
まあ、でもLINQの範囲のデータ処理はC#のほうがいいな

181 :11/09/10
Start F#
http://slideshare.net/osiire/3-8660480

182 :11/09/10
bleisさんフォローしておけばいいんじゃね?

183 :11/09/10
>170 意味不明だったけど、これってFortran#っていうネタか。

184 :11/09/10
外人フォローしたほうがいいよ

185 :11/09/10
>>184
リストくれ

186 :11/09/10
ボスは、アカウントあるけどつぶやかなかった気がするな

187 :11/09/13
>>186
ボス?ドンサイム?

188 :11/09/15
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サポート増えるみたい。

189 :11/09/16
ファンクタ対応したのかな

190 :11/09/16
従来交わることのなかった OCaml 使いと C# 使いがそれぞれ別の切り口で文句を言いに集うスレはここですか?

191 :11/09/16
>>190
仕事で両方使ってる人は、期待することはあっても文句はいわんだろ。
P層C#、F層F#でそれなりの規模のもの作ってみると、結構使える手ごたえはある。
普通にF#で機能を一つ作った後、その中で理論的に並列動作できそうなところがあれば、
それをマルチスレッド化するのに数分の作業で済むことも多いし、それがいつも安定して動く
という経験を重ねると、これからの時代C#だけじゃだめかなという気にもなってくる。
まだ立ち上がって数年の言語だし、捨てられないでちゃんとバージョンアップしてくれてるから、
まだまだこれからと見るべきでしょう。

192 :11/09/16
Type Providerってなんなのか教えて下さい

193 :11/09/16
型を定義することなくデータソースから何らかの方法でメタデータを取得し静的な型として扱えるようにするものって感じかの。

194 :11/09/16
>>193
ありがとうございます
型定義を手で書かなくても済むようにするための
メタプログラミングの仕組み、みたいな感じでしょうか。。。

195 :11/09/17
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のドキュメントがもう揃ってるんかー

196 :11/09/17
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#も使えそう。

197 :11/09/17
Twitterで上がった話題(iOSでF#)で、F#のSymeがMonoのIcazaに、
build会場周辺でちょっと合って話さんかとかやってる。

198 :11/09/18
F# 3.0 Quick Preview
http://www.slideshare.net/igeta/fsharp-langupd-fpm2011

199 :11/09/18
C++のようなメタプログラミングができるのですか?

200 :11/09/18
C++ の template みたいなマクロの延長のものじゃなくて、
ビルドプロセスをフックして型を作ってるんじゃないかな。
そっちも .NET (F# 含む)で書ける。

201 :11/09/20
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)英語で正常に表示された。

202 :11/09/20
MetroAppのソリューションテンプレート用意されてなかった。
さすがにリリース前あたりには、用意されるとおもうが、、
とりあえずWP7と同じようにギャラリーに来るのかな
http://blogs.msdn.com/b/dsyme/archive/2010/08/20/f-windows-phone-7-silverlight-templates-now-on-visual-studio-gallery.aspx

203 :11/09/23
>>191
いまだに手応えとか、いつまでそんなこと言ってんだよ
一生前衛みたいな感じかw

204 :11/09/27
ScalaとF#と両方勉強しているのですが、
判別供用体(代数的データ型)の、パターンマッチについて教えてください。
Scalaでは、case class で定義すると、内部的には、class 定義に、applyやunapplyメソッドを持たせて、オブジェクトに対してパターンマッチを行っているようです。
F#の場合は、どんな感じでしょうか? F#の判別供用体も、実際はクラスから作られたオブジェクトなんですよね?? (.Net言語だから、そう考えたんですが。。)
そうすると、Scalaのapplyやunapplyに対応するメソッドを持ったクラスなんでしょうか?
教えてください、よろしくお願いします。

205 :11/09/27
Scalaのapply,unapplyはよくしらんのだけれど、F#では各共用体は派生クラスとして実装される。
各々Tagを持ってるのでパターンマッチはそのTagを見てると思う。

206 :11/09/27
夜遅くに(朝早くに)ありがとうございます。
なるほどクラスとして実装されているんですね。
type A =
| B
| C
| D
だと、派生クラスB、C、Dが定義されていて
たぶん、スーパークラスとして、クラスA とか定義されているんでしょうか。(クラスAでなくてもよいとは思いますが)
もし、クラスAだとすると、このクラスAにもTagを定義するように定義されていると思いますが、
クラスAは、.Netというか、F#のクラス的には、もともと何クラスなんでしょうか?
ちょっと、質問がわかりにくくてすみませんが
たとえば
let hoge:A = B
とか、書いた場合に、
変数 hoge の束縛している、クラスが何かって、得る関数ありますか? という質問がしたいです。
(判別供用体のBを返すのでなく、元のクラスが何か? を得る関数という意味です。)

207 :11/09/27
F#の中では知らん。
Reflection使ってbaseクラスたどってみては。
C#から見ると多分Aとして見れると思う。

208 :11/09/27
普通に
type A = | B
hoge.GetType().Name
;;
でAって出てきた

209 :11/09/27
type A =
| B
| C of int
let hoge = C 10
hoge.GetType().Name
;;
はCだった

210 :11/09/28
みなさんありがとうございます。
自分なりの理解はこんな感じになりました (↓素人理解です)
F#のレベルでは、
判別共用体と、クラス・オブジェクト は全く別のもの。
CLRレベル(.Netレベル)ではたぶん、同じような仕組みで実装されている。
一方、
Scalaは、いわゆる判別共用体は、クラスの拡張で実現されているように思います。
(applyやunapplyというものを定義したもの)
※ 素人の理解ですが。

211 :11/09/28
>>210
ProgramingF#のC#Interropの章にF#で定義したunionがC#だとどういうクラスとして定義されるか出てるから見てみるがヨロシ。
webでもどっか転がってそうだけど。

212 :11/09/30
実践F# を読んでいると、
OOPの章のP264に、
本書では、詳細に踏み込みませんが、レコードや判別共用体の定義とは、F#コンパイラが構造的な性質
を持つように特別なパターンを適用したクラスとして生成するものです。本節では、特別なパターンが施されな
い、生身のクラスを定義する方法を示します(リスト8‐5)。
と書いてあって、F#ではクラスの特別なものが、判別共用体や、レコードのようなきがする。

213 :11/10/01
特別なクラスというと語弊がある。
MSIL上は継承関係とか種類を表すタグとかが一定ルールに従っているただのクラスであり、其れが自動生成されているだけ。

214 :11/10/12
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
46位か…… なんかえらい順位下げちゃったね。何でだろう。

215 :11/10/12
1%切ってるところは誤差だろ。

216 :11/10/12
TIOBEみたいな腐れ調査機関とか相手にすんなよ…

217 :11/10/22
まあ、F#が20位以内というのはおかしいよね。

218 :11/10/23
しかしそれでもScalaより上って・・・・・目くそ鼻くそとはこのことか。
はやくJavaの時代終わらないかなぁ・・・・

219 :11/10/23
>>218
scalaは関数脳に慣れてない人からは関数型言語部分に苦しんで、haskellやOCamlで関数脳になった人からは関数型言語としてはキモイから。。。
F#Express出たらかなり差が付くだろうね
haskellもGUIに特化した専門書とか出ないと伸びないんだろうな。。。

220 :11/10/23
>>219
haskell でguiな本書こうか?

221 :11/10/23
>>220
ぜひ!!

222 :11/10/23
>>221
gtk2hs でもいいっすか?
haskell-qtはまだ使ったことないんです、、、

223 :11/10/23
>>222
自分もgtk2hsの勉強始めたばかりなんで、渡りに船です

224 :11/10/23
>>223
とりあえず開始するかもしれないです。
でも期待はしないでください、、、、

225 :11/10/23
>>224
うい

226 :11/10/23
たぶん原稿の成長とcarettahのコード品質は同期するだろー...λ

227 :11/10/26
よく知らんが買わんぞ?

228 :11/10/27
>>227
全く売れないのも面白いのでwwww

229 :11/11/09
>>220
書いて

230 :11/11/09
現在の購入予定者2名

231 :11/11/09
良い本だったら買うし良い本ではなかったら買わない

232 :11/11/09
>>231
同人誌レベルなら、、

233 :11/11/11
>>220
買います

234 :11/11/11
>>220
SOEより凄いなら買う

235 :11/11/11
https://github.com/fsharp
githubに、fsharpオープンソースコミュニティーというのがあるのか。
donsymeがいると公式感があるな。
mono開発者のicazaも入ってる。
F#はClojureCLRと違って余裕あるからか、monoとの互換性も重視してたの思い出した。

236 :11/11/11
http://wizardsofsmart.net/post/iteratee-in-f/
最近FPではやりのIteratee使った関数型っぽいIO作り始めたよという記事?
future-io
https://github.com/fractureio/fracture
fsharpxってのがあるのか。
scalazとはまた違う?
https://github.com/fsharp/fsharpx

237 :11/11/11
作ってるのはSocket IOだった。
Fracture/Pipelet/Frackって分かれてる。
future-ioはSSDだった・・・orz

238 :11/11/14
M$がhtml5の構想に弱音を吐いて.net戦略を撤退したらf#ってどうなるんだろ

239 :11/11/14
VisualOcaml作って欲しい

240 :11/11/14
VisualHaskellを(ry

241 :11/11/14
F#はType Classの要望が強かったけど
.netの型システムとの互換性を重視して入れなかったとどっかで言ってたから
H#はないんじゃないの?
ちなみに"Visual Haskell"は既にあるよ

242 :11/11/14
>>241
>ちなみに"Visual Haskell"は既にあるよ
そうだった。VS2010に対応したかな?少しは安定したかな?
全然使えなさそうですっかり忘れてた
>F#はType Classの要望が強かったけど
>.netの型システムとの互換性を重視して入れなかったとどっかで言ってたから
・・・orz

243 :11/11/14
Haskellようしらんのだが、型クラスあるとなにがどう幸せになるん?

244 :11/11/14
>>243
多層的で等価比較、順序比較出来るリストを簡単に定義出来たりする
data List a = Null | List (List a) deriving (Eq,Ord,Show,Read)
使用例
List 1 (List 2 (List 3 Null))
head (List x _) = x
tail (List _ xs) = xs

245 :11/11/14
Eq,Ordが型クラスで、List aがインスタンスだから、例としてはこっちが適切か
large xs ys | xs < ys = (ys,xs)
large xs ys = (xs,ys)

246 :11/11/14
C# のプロジェクト で F# のファイルのインポートがどうしても
できないんですがどっかにまとまってないでしょうか?
あとC#プログラム中でfsファイルの実行は不可能なのでしょうか?
C#, F# のプログラムがそれぞれ下のようだったとして
main(){
exec(1.fs); //this is c# code
Console.WriteLine("aa");
}
########
let a = 3 // this is F# code
printfn "hello"
#########
実行して
hello
aa
となるような

247 :11/11/14
インポートは出来ますた
http://beyondrelational.com/blogs/niladribiswas/archive/2011/08/09/how-to-call-a-f-dll-from-c.aspx

248 :11/11/14
F#側のdllをC#でインポートするだけでしょ?

249 :11/11/17
>>246
ねーよ

250 :11/11/17
この先長そうだね。
コンパイラと実行ファイル
evalとコードとか関係を勉強するのが先のようにも見えるが、とりあえず。
http://www.google.co.jp/search?hl=ja&q=c%23+f%23+%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88

251 :11/11/18
え?

252 :11/11/19
いや、この発想はまだまだ用語や概念判ってないのかなと思って
exec(1.fs); //this is c# code

253 :11/11/19
F#のevalは興味あるんだけどfsiのソース見ればいいのかな?

254 :11/11/20
ocaml のfunctor の代替手段はF#だとなんですか?

255 :11/11/24
XML に Serialize したいんだけど、mutable にするしか方法ない?
ttp://cs.hubfs.net/topic/None/57413
↑は見たんだが、02-SerializeXml.zip はダウンロードできないみたい

256 :11/12/10
http://d.hatena.ne.jp/zecl/20111004/p1
F#でぷよぷよだって。コード全然読めん

257 :12/02/14
あら止まってんの
ブロガー結構増えてんのに

258 :12/02/18
580 名前: デフォルトの名無しさん Mail: sage 投稿日: 2012/02/16(木) 05:11:31.94
F#を始めたのだが、モナドで行き詰まっている。
F#の本にはモナドのことが書いていない。
で、ネットでモナドのことを収集すると、ハスケルのがほとんど。
F#での説明もあるが、なんか解りづらい。
で、モナドって何ですか?
関数型プログラミングをやるにはモナドが必須ですか?
どなたか教えてください _o_
613 名前: デフォルトの名無しさん Mail: sage 投稿日: 2012/02/17(金) 09:25:13.67
>>580
ここは読んだか?
http://www4.atwiki.jp/fsharpmaster/m/pages/13.html
>StatefulFuncはなぜ動くのか?
>  StatefulFuncを含むワークフロー(モナドとも)を理解する道筋はいくつかあ
> ると思いますが、まず最初に「操作的」に手を動かしてプログラムの意味を解き
> ほぐしていくアプローチを取ってみようと思います。

259 :12/02/18
>>169
日本語翻訳版
F# プログラミング - F# で MVVM アプリケーションをビルドする
http://msdn.microsoft.com/ja-jp/magazine/hh394149.aspx

260 :12/02/18
MVPVM 設計パターン - WPF 向けのモデル - ビュー - プレゼンター - ビューモデル設計パターン
http://msdn.microsoft.com/ja-jp/magazine/hh580734.aspx

261 :12/02/19
【消しゴム】MONOを使ってみるスレ4【じゃない】
http://toro.2ch.net/test/read.cgi/tech/1329023778/

262 :12/03/09
もまいらもっとF#書けや

263 :12/03/09
みんなTwitter
に行っちゃってるのかな。

264 :12/03/10
本質的には別物

265 :12/03/16
F#はどこの世界が流行してるの

266 :12/03/16
俺の中では超マイブームです(´・ω・`)

267 :12/03/16
英ケンブリッジなら、Haskell,F#,Erlang,Clojure流行ってる

268 :12/03/16
http://www.google.co.jp/trends/?q=F%23
アイルランド?ロシア?

269 :12/03/20
ウィキ作った。
書くの手伝ってくれ。
http://goo.gl/9UG1y

270 :12/03/20
>>269
なんでいきなりFreeBSDやねん!

271 :12/03/20
F#/monoを扱うなら解るようにした方がよいかも?
そして、MonoとF#のインストールの関係で、Linux or OSX, FreeBSDの順で情報がない気がする。
使い始められればそんなに変わんないと思うけど。

272 :12/03/25
code quotationとtype providerを組合わせたらlisp macroみたいなことができるんです?

273 :12/03/28
何でこんなに過疎ってるんです?

274 :12/03/28
世の中がばかりだったら困るだろ?

275 :12/03/28
LISP Haskell Scalaなんかはばかりでも伸びてるんで
むしろへのアピールが足りてないが正しい
関数型がいいといっても.netならC#、
いざ関数型の勉強だ、ってF#にするくらいなら他の言語に目移りするわけだ
もはや言語ヲタを引きつける言語としての魅力、が欠けてるのははっきりしたと思う
それでもF#好きなのはのさらに?いやいやただのマイノリティ

276 :12/03/29
>F#にするくらいなら他の言語に目移りするわけだ
ごめ、なにを根拠に光入ってるのか意味不(´・ω・`)
F#いいよー

277 :12/03/29
公式フォーラムも、あんまり使われてないね。
http://social.msdn.microsoft.com/Forums/en-US/fsharpgeneralja/threads?sort=lastpostdesc
ただ、かの名古屋の地ではocaml, F#, scalaを受託環境にあわせて使い分けてると聞く。
いまだとblogやtwitterなら答え返って来ることもあるよ。
英語が苦にならないなら活発なフォーラムがあるので無問題。
http://social.msdn.microsoft.com/Forums/en-US/fsharpgeneral/threads?sort=lastpostdesc
http://stackoverflow.com/questions/tagged/f%23
( http://cs.hubfs.net/topic-tag/0/1/f~23 )

278 :12/03/29
OCamlも道連れで寂れてるし
D言語スレなんて誰が使ってるかさっぱりわからんが未だに書き込みあるからなあ
まあ粘着質な人が少ないんだね

279 :12/03/29
関数言語厨が.net環境ででも関数型ぽいことをしたくて使う言語だわ

280 :12/03/29
とりあえずF#じゃなくてC#を使わないといけない理由が殆ど無いのでF#ばかり使ってます(´・ω・`)
デザイナー等C#必須であれば、F#のモジュールと混在って感じですね。
PortableLibraryに期待(´∀`∩)↑age↑

281 :12/03/30
>>273
Haskellスレも概ねそうなんだが、簡単に関数を自作出来ちゃうから、「こう言う事したいんだけど、どう書けば良い?」みたいな質問はほとんど無い
自分も、Haskellスレで質問したのは練習問題でリスト内包表記でこう言う関数を書けって問題の時だけだったし
変に制限付くとどう書けばいいのか分からなくなる事はあっても、制限なしだと、割と初心者でも関数書くのに困ること無いのが関数型言語の良い所だと個人的には思ってる
オブジェクト指向言語だと、オブジェクト自作するのは意外と面倒だし、メソッド覚えれば、ある意味じゃ関数型言語よりも簡潔なんだけど、リファレンスと睨めっこしてメソッド覚える必要がある
(なので、こう言う処理するメソッド無い?とかの質問がオブジェクト指向言語のスレでは絶えないんだと思う)

282 :12/03/30
とりあえず、なごやこわい

283 :12/03/31
F#でWindowsPhoneの開発をしたいんですが
Visual Studio 2010 Express for Windows Phoneじゃ無理なんでしょうか?
http://visualstudiogallery.msdn.microsoft.com/17454c58-c1d9-4640-afe1-7943db13891e/
Visual Studio 2010 Professionalがないと開発出来ないんですかね?

284 :12/03/31
>>283
「visual studio 2010 express f#」でググったら、先頭のページに
Visual Studio 2010 ExpressにMicrosoft F# CTPを組み込む方法と
すでにF# April 2011 CTPが出ている事が書いてありました。
Visual F# Express Edition の入手方法
http://d.hatena.ne.jp/Nobuhisa/20100905/1283678443

285 :12/03/31
無償環境だと、F#はVS Shell、WPはVS C# Expressに結びつく。
そして、F#を通常のVSに結びつけるのには、ExpressではなくProfessional以上じゃないといけないはず。
TOP カテ一覧 スレ一覧 2ch元 削除依頼
くだすれPython(超初心者用) その13 (126)
★★Java質問・相談スレッド152★★ (780)
強いAI(人工知能)ver0.0.1 (665)
Mozillaでプログラミング(XUL) その3 (538)
【思考】オセロのAIを作りたいのだが【難問】 (473)
Visual Studio IDE環境 (541)
--log9.info------------------
どんなRPGがやりたいか貴様らかいていけ (398)
心に残る佳作、デュープリズム その21 (345)
スクウェア・エニックス総合スレ (109)
テイルズ オブ レジェンディア part128 (221)
メタルマックス・メタルサーガ総合スレpart12 (549)
トラスティベル 〜ショパンの夢〜 総合スレ5 (196)
デビルサマナー葛葉ライドウに文句を言うスレ 2代目 (358)
【TOE】テイルズオブエターニア総合 part28 (318)
オブリビオンのDLC配信要求スレ9 (891)
【Wii】FRAGILE(フラジール)〜さよなら月の廃墟〜part31 (979)
【Wii】何故ラストストーリーは失敗したのか? (146)
センスが良すぎると感じたRPGのネーミング その3 (812)
◆ベルゼーヴァのばら ジルオールpart187◆ (543)
ベイグラントストーリー 72 剣豪の死を見届けた階段 (828)
PS信者騙されすぎジャンプにTOVは無かったwwww (346)
【PS3】アルトネリコ総合 part319【PS2】 (562)
--log55.com------------------
ネトウヨって在日をみたら即発狂してるけど、嫌なら日本から出ていけよ(´・ω・`)文句あんの?(´・ω・`)
アマゾンのサクラレビューを見抜くサービス『サクラチェッカー』が公開 おまえらが騙された物は?
自民公明政権、終わりの始まり!!れいわ新選組の応援に元公明党副委員長まで登場!!
Twitterで #安倍政権支持って恥ずかしい タグが人気沸騰中。数分おきに新しい投稿
洪楠基経済副首相兼企画財政部長官「日本は輸出統制措置を撤回し協議に応じろ。大変なことになるぞ」
BE:151915507、バカがバレて逃亡。怒りのパヨスレ連立てwwww
文在寅「韓国の成長が阻害されるので、半導体規制で日本は外交的解決の場に戻れ」3回目のメッセージ
【画像】 ロリコン 「1枚目より2枚目の女子会に参加したい」←嘘だと言ってくれよ…