2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん: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-

2 :デフォルトの名無しさん:2011/05/01(日) 02:52:55.61
- 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 :デフォルトの名無しさん:2011/05/01(日) 02:58:27.71
>>980ぐらいで新スレを建ててね。
注意事項 http://info.2ch.net/wiki/index.php?%C7%A6%CB%A1%C4%A1%B4%AC%CA%AA

4 :デフォルトの名無しさん:2011/05/01(日) 03:34:36.83
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 :デフォルトの名無しさん:2011/05/01(日) 03:42:19.97
現在の最新版について
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 :デフォルトの名無しさん:2011/05/01(日) 04:49:34.58
>>1


7 :デフォルトの名無しさん:2011/05/01(日) 10:03:33.09
言語の特徴としては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 :デフォルトの名無しさん:2011/05/01(日) 11:06:11.34
>>7
名古屋ではF#が結構使われているという話を聞いたんだけど、やっぱり
自動車関係の仕事が多いからなのか?

9 :デフォルトの名無しさん:2011/05/01(日) 11:45:09.38
http://www.itpl.co.jp/ocaml-nagoya/
これが関係してないか?

10 :デフォルトの名無しさん:2011/05/01(日) 13:04:53.26
名古屋怖い(´・ω・`)

11 :デフォルトの名無しさん:2011/05/01(日) 13:39:03.13
>>2, >>4 TryF# もよいけど、Silverlight入れたくない人やsmart phoneな人は
IdeOneも使える事を知っとくと良いよ。

hello worldを書いてみた。
http://ideone.com/ze0wq (こうやってソースと実行結果を貼ることもできる)

12 :デフォルトの名無しさん:2011/05/01(日) 18:56:09.06
コード共有するのには、IdeOneみたいなサービスがいいけど、
F# InteractiveのWebコンソールとしては、これが便利かも。

Try F# in your web browser
http://tryfs.net/



13 :デフォルトの名無しさん:2011/05/02(月) 23:26:40.62
そもそもなんでF#はF#という名前になったの?
FはFunctionのF?
あとC#がC++++から#になっているのは理解できるけど、
F++はもちろんF言語なんて聞いたことがないんだけど。

14 :デフォルトの名無しさん:2011/05/03(火) 00:03:14.45
C#の名前を結構気に入ってたから、.NET言語になんでも#つけてた時期がある。

15 :デフォルトの名無しさん:2011/05/03(火) 00:08:59.63
>>13
j#の後釜だからじゃね?
fは探せば有りそうだし


16 :デフォルトの名無しさん:2011/05/03(火) 00:12:28.32
J#がでた段階か分からないけど、[A-Z]#なら.net用言語に見える
MSに関係する範囲では、C#,F#,J#のみっぽいけど。
http://en.wikipedia.org/wiki/List_of_CLI_languages

17 :デフォルトの名無しさん:2011/05/03(火) 00:20:06.88
>>16
schemeが#Sなのにcommon LispがL#な所は狡猾さを感じるなw
宗教論争とか起きなかったんかね


18 :デフォルトの名無しさん:2011/05/03(火) 00:57:40.67
結構粘ったやつも2009年ぐらいにメンテナンス止まってるみたい。
lisp系でメンテナンスが続いてるのは、結局Clojure(CLR)らしい。
https://github.com/richhickey/clojure-clr/downloads

19 :デフォルトの名無しさん:2011/05/03(火) 03:25:35.02
F#で標準入力を遅延リストみたいに扱う方法ってあるのでしょうか?

20 :デフォルトの名無しさん:2011/05/04(水) 06:22:20.80
ファイルの例だけど。
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 :デフォルトの名無しさん:2011/05/04(水) 06:26:13.36
F# 1.0の書籍だった。

F#2.0 は、こっち。
http://books.google.com/books?id=y3kaQxIns0oC&lpg=PP1&pg=PA96#v=onepage&q&f=false

22 :デフォルトの名無しさん:2011/05/04(水) 08:20:27.45
>>20 >>21 ありがとうございます。

23 :デフォルトの名無しさん:2011/05/06(金) 09:50:41.49
RT @igeta: 翻訳ありがたい。/「あなたの開発チームに F# を持ち込むリスクについての神話」 http://bit.ly/k8ZDo1 (by @finalfusion) #fsharp

24 :デフォルトの名無しさん:2011/05/09(月) 19:18:09.17
scalaとF#使うならどっち?

25 :デフォルトの名無しさん:2011/05/09(月) 20:41:26.84
>>24
MSならF#、それ以外ならScala。
構文は全然違うけど言語パラダイムはそっくりだから俺は両方勉強してるぜ。なかなかためになる。

26 :デフォルトの名無しさん:2011/05/09(月) 22:19:12.87
誰かC#とF#の比較してくれねーかなー

27 :デフォルトの名無しさん:2011/05/09(月) 23:43:25.51
違いすぎる→そんなに違わないな→やっぱ違うわ→まあ、同じとも言えるな。こんな感じが延々と続く。C#とF#の比較。

28 :デフォルトの名無しさん:2011/05/10(火) 08:47:38.70
>>26
>>7 に書いてある。

29 :デフォルトの名無しさん:2011/05/10(火) 14:09:41.30
>>7の「高階関数」でC#が△になってるのはなんか理由あんのかな
っていうか、「ファーストクラスの関数」でよくね

tail call elimination
nested functions
automatic currying
cons, tuple
list comprehension
あたりも比較項目につけくわえていい気がする

30 :デフォルトの名無しさん:2011/05/10(火) 20:47:06.71
bingでF#検索すると残念なことに・・・

31 :デフォルトの名無しさん:2011/05/10(火) 22:09:08.41
>>7
そっくりなところを比べればそりゃそっくりだろうさ

32 :デフォルトの名無しさん:2011/05/10(火) 23:07:45.67
>>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 :デフォルトの名無しさん:2011/05/10(火) 23:23:15.17
Actorモデル
Scala->○
F#->○に近い△
C#,Jave->×

って感じ?ちょっと不勉強なので正確かわからん。

34 :デフォルトの名無しさん:2011/05/10(火) 23:50:49.02
>>32
Scala は JVM の制限とかで tail call elimination ができないときがあるような
@tailrec アノテーションをつけておけば、できかなったときは教えてくれるけど

Scala は list comprehension あるんだっけ
for 式だったら、あれはどちらかというと Haskell の do に近いような

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

36 :デフォルトの名無しさん:2011/05/11(水) 09:09:48.47
>>35 LINQでlist comprehension できるのか。知らなかった。
Haskellでの[x+y | x <- [0..9], y <- [0..9], x<y] みたいなのもLINQを使えば書けるのか?

37 :デフォルトの名無しさん:2011/05/11(水) 09:21:52.16
LINQだと
from x in Enumerable.Range(0, 10)
from y in Enumerable.Range(0, 10)
where x < y
select x + y
とかそんな感じだろう

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

39 :デフォルトの名無しさん:2011/05/18(水) 00:17:22.59
monoは今レイオフされたり会社設立したりと本体がゴタゴタしててそれどころじゃないんだろ

40 :デフォルトの名無しさん:2011/05/18(水) 08:05:24.37
>それともF#なんかマイナー言語相手にしてる暇ねーぜヒャッハーってだけ?
被害妄想?


41 :デフォルトの名無しさん:2011/05/18(水) 08:28:33.12
Mono for AndroidよりMonoTouchのが制約きついみたいだね。
http://d.hatena.ne.jp/atsushieno/touch/20110407/p1 の最後の段落

42 :デフォルトの名無しさん:2011/05/26(木) 01:34:35.70
しかしまあF#ってScalaほど必要とされている感がないんだよなー
なまじC#がよくできてるから

43 :デフォルトの名無しさん:2011/05/26(木) 01:37:10.04
企業の後ろだてのある言語じゃなく、1研究社が作った言語が注目集めるとかおかしいだろ。
どんだけJavaはアレなんだよ。

44 :デフォルトの名無しさん:2011/05/26(木) 08:00:06.97
>>42 確かにScalaは多くのJava技術者に注目を浴びているけど、Scalaいいって
言う人の言うことはそのままF#にも当てはまるんだよね。
ScalaがF#に比べて人気ある理由はC#がJavaより良くできているという以外に
構文がJavaから大きく離れてはいないという点があると思う。Javaコードを

コピペして微修正すればScalaコードとして動くし、Scalaコードを見てもある程度
読めそうな気になるから移行しやすいんだよね。


45 :デフォルトの名無しさん:2011/05/26(木) 08:01:26.91

一方F#は構文が違いすぎるし、初見だと全然読めない。このとっつきにくさが
結構効いているんじゃないかな。

でもF#は関数型言語としてScalaよりずっといい線行っている(構文はキモいけど)
ので、Scalaへの大移動が現実になったときC#erはF#への移動を準備すべき。
C#erがレガシーな理由のみで残りつづけて老害とならないようになってほしい。


46 :デフォルトの名無しさん:2011/05/26(木) 22:48:33.47
ScalaはGood Java。Javaに取って代わることを目標としているマルチパラダイム言語。
F#はあくまでもC#の補完。.NETファミリーの関数型言語の位置づけ。

scalaは関数型的な使い方をしなくてもいろいろ遊べる。
最初の関数型言語にScalaを選んでしまった場合、
Good Javaの部分だけで腹いっぱいになって関数型までたどり着けないことが多い。

47 :デフォルトの名無しさん:2011/05/26(木) 23:11:20.22
Scalaは、未来のJavaを先取りした言語と表現してるが、
Scalaと同じ機能がある未来のJavaは構文がもっと複雑なんだろうな。

48 :デフォルトの名無しさん:2011/05/27(金) 00:43:20.31
Scalaは関数型ってだけじゃなくてオブジェクト指向言語としてもJavaより進んでるのがウケてる理由の一つの気がするな

49 :デフォルトの名無しさん:2011/05/30(月) 19:59:14.67
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 :デフォルトの名無しさん:2011/05/30(月) 20:03:43.87
F#の嫌なところを1個見つけたよ。
インデント?空白?によって
ブロック的なものが決まることかなぁ。
だから、必然的に自動整形ってできないんだよね?
複数行選択後のtab/shift+tabができなかったら、
発狂するレベルだねw

あとは、クラスを定義する時の修飾子の多さも、ちょっとうんざりだよね;;
どういう書き方が一番エレガントなんだろう・・・

関数を定義する順番に依存しちゃうってのも、なんというか・・・
そこら辺はやっぱりscalaの方が上っぽい?

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

52 :デフォルトの名無しさん:2011/05/30(月) 22:48:20.11
>>51
カッコよりはインデントの方が良いとは思うが・・・
自動整形欲しいよorz

クラス使わないって厳しくない?

Scalaのどの辺が偽なの?F#も偽だと思うけど。


53 :デフォルトの名無しさん:2011/05/31(火) 00:54:09.98
>>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 :添削お願いします:2011/05/31(火) 18:17:18.40
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 :添削お願いします:2011/05/31(火) 18:19:35.69

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 :添削お願いします:2011/05/31(火) 18:22:50.97
インデントが全部消えてごめんなさい。

疑問点
・OP2をletで定義できないのはなぜだろうか?
・intからfloatへの変換は自動でできないのだろうか?


57 :デフォルトの名無しさん:2011/05/31(火) 21:12:59.18
関数型の本質は型推論によって、関数が気軽に定義できることだろうか?

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

58 :デフォルトの名無しさん:2011/05/31(火) 22:05:41.56
>>56
>・OP2をletで定義できないのはなぜだろうか?

以下のページの「let バインディングと do バインディング」が参考になるかも。
ttp://msdn.microsoft.com/ja-jp/library/dd233205.aspx

>・intからfloatへの変換は自動でできないのだろうか?

「プログラミングF#」の「2.1.3 変換処理」に、
「F#言語は暗黙的な型変換を行わないことを1つの方針としています。」
とか書いてあるんで無理なんじゃないかな。

59 :デフォルトの名無しさん:2011/05/31(火) 22:51:27.68
>>58
>静的メソッドからはこのフィールドにアクセスできません。
って書いてありました。ありがとう。

それはそうとdoバインディングってなんだろw

60 :デフォルトの名無しさん:2011/05/31(火) 23:12:52.10
関数型の本質()とかどうでもいいわ。
問題は単にF#が便利なのかどうかだわ。

61 :デフォルトの名無しさん:2011/06/01(水) 00:00:04.86
>>60
クラスブラウザがVSに実装されるまでは大規模開発が難しいのと
GUIエディタが無い現状はC#の代替にはならないかな、と思った。

F#は関数をさくさく作れる。
C#のクラス定義は単純明快だけど、
F#のクラス定義の方法は難解で、冗長で、読みにくいが、改行は少ない。
F#のyieldは便利。F#の()は読みにくい。F#のSeqは美しい。
F#は基本的に読みにくい。

62 :デフォルトの名無しさん:2011/06/01(水) 00:26:26.68
>>61
F#のクラス定義の方法は
難解で読みにくいってのはまあ慣れと好みだが
冗長でってのはどうかね?

C#のクラス定義は単純明快ってのは
私はC#のクラス定義に慣れているんです
って以外に意味を持たない主張に思えるが。

63 :デフォルトの名無しさん:2011/06/01(水) 01:15:18.81
>>62
memberは明らかにいらない子

64 :デフォルトの名無しさん:2011/06/01(水) 07:35:25.35
memberがいらないとか・・・
全然明らかじゃないからkwsk

65 :デフォルトの名無しさん:2011/06/01(水) 09:04:05.36
F#ではfun x y ->x+yをx y->x+yに出来なかった言語仕様上の問題とかあったん?

66 :デフォルトの名無しさん:2011/06/01(水) 09:32:09.49
>>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 :デフォルトの名無しさん:2011/06/01(水) 18:11:51.65
funは正直鬱陶しいなあ。

68 :デフォルトの名無しさん:2011/06/01(水) 18:40:51.63
F#やってて、便利と思うのは
関数の中に関数をかけることだな。
しかも、F#における関数はOOPでいう関数ではなく、
OOPのクラスに相当する。

逆に不便だなって思うことは、共通して使う関数を作った時に
どこへ置けばいいかわからないこと。F#はスコープの制御がダメだね。

69 :デフォルトの名無しさん:2011/06/01(水) 20:34:34.08
>>65
OCaml互換。C#の人かな。\x ->ならまだしもx ->はさすがに無理くねーか。
>>67
気持ちはわかります。

>>66
クラス内にはletとdoもかけるぞ。あとコンストラクタはメンバじゃねえ。

>>68
どこ置けばいいかわからない?F#でだけ?どの言語でも同じじゃまいか。

70 :デフォルトの名無しさん:2011/06/01(水) 20:37:59.90
あと自動整形できないからっての、よくわからん。
整形されたコードしかコンパイル通らんのだから
そもそも整形する必要ないじゃんか。



まあ俺もオフサイドルール嫌いだけど。

71 :デフォルトの名無しさん:2011/06/02(木) 12:42:05.73
オフサイドルールをやめるとすると、
他の選択肢ってなんだろ?
一つは{}だよね。

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

73 :デフォルトの名無しさん:2011/06/02(木) 16:13:53.96
>>71
つ Verbose syntax

74 :デフォルトの名無しさん:2011/06/02(木) 20:42:24.42
FSIにnamespaceとかopenて流し込めないんだね・・・

デバッグの途中で
add 1 2
とか打てたらいいんだけど・・・
F#ってデバッグが難しいね;;



75 :デフォルトの名無しさん:2011/06/02(木) 21:59:27.33
>>72
サブクラスとか、キャストとか、なんか根本的に間違ってないか。

>>74
openは流せる。まさかopen Listがエラーだからとか言わないよね?

76 :デフォルトの名無しさん:2011/06/02(木) 22:05:03.83
>>75
あぁ、ごめん。書き方が悪かった。

自分で定義したnamespaceを
openすることができないってことでした。すいません。

77 :デフォルトの名無しさん:2011/06/02(木) 22:44:29.66
>75
いやC#からだとUnionそういう風にしか扱えなくなかったっけ?
そのUnionのインスタンスでIsManagerとかよべるけど。ManagerであるUnion値をManagerとして扱いたいときにどうしたらいいかって話。
もっとまともな方法あったっけ?

78 :デフォルトの名無しさん:2011/06/03(金) 00:30:20.24
>>77
type Employee = ... | Manager of Hoge の場合↓

var emp = Employee.NewManager(hoge);

if (emp.IsManager) {
    var mngr = ((Employee.Manager)emp).Item;
    // dosomething
}

だからDesign Guidelinesにはまんま使うなと書いてある。


79 :デフォルトの名無しさん:2011/06/03(金) 09:26:19.89
誰かF#のいいデバッグ方法教えてー

80 :デフォルトの名無しさん:2011/06/03(金) 09:28:24.98
F#のC#に対して優れているところを教えてください

81 :デフォルトの名無しさん:2011/06/03(金) 09:50:11.17
>>80
協力な型推論、nullがない、パターンマッチ、関数内関数ができる、対話環境、並列計算に強い
とかじゃね。

82 :デフォルトの名無しさん:2011/06/03(金) 09:55:29.01
nullって悪者なんですか・・・
パターンマッチ、並列計算に強い はおもしろそう


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

84 :デフォルトの名無しさん:2011/06/03(金) 10:16:25.55
>>83
Debugしながらでもソースがいじれる・・・イイ!

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


86 :デフォルトの名無しさん:2011/06/03(金) 15:53:21.29
まあ、どんなの場面でもnull不要とはいわないけども、
Anders Hejlsbergも「nullableの概念は参照型/値型の概念とは独立させておくべきだった」っていってるしね。
非nullable参照型は欲しい。

87 :デフォルトの名無しさん:2011/06/03(金) 18:18:05.09
>>86
関数型言語にはnullは必要ないよ。関数型プログラマはnull参照エラーみたいなアホみたいな実行時エラーとは
無縁の世界でプログラムしているよ。


88 :デフォルトの名無しさん:2011/06/05(日) 00:00:41.87
>>83
FSharpFuncってなんですか?

数値計算のプログラムを作ってる時は、
デバッグは絶対必要なんですよね・・・

関数の形で定義してると、途中で止めても
中の数値が見れないんですよねorz

let x=f a
とかしちゃってる時に、
f 1
の値を見る方法がないと、数値計算のプログラムのデバッグは
無理かなーと。

現状のF#を数値計算に使うと死ぬかも・・・・


89 :デフォルトの名無しさん:2011/06/05(日) 06:40:44.23
伝統の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 :デフォルトの名無しさん:2011/06/05(日) 12:12:50.78
>>89
%Aでリスト(行列)を全表示できるのかな?
そうなら、そういう関数作っておけば、確かに楽そうだね。
DOS窓かよって不満はあるけどw
それやってみるよ。ありがと。

また、ただ、いろいろ細かい状態が知りたかったりするから
デバッグ中に値が知りたいというニーズは多いし、
あとはけっこう量が多いんだよね・・・うーん。

91 :デフォルトの名無しさん:2011/06/05(日) 12:13:56.07
そういえばVSのデバッガは何だかんだでC#前提なままだったね。

92 :デフォルトの名無しさん:2011/06/05(日) 12:25:05.75
> FSharpFuncってなんですか?
関数の型。クロージャ作るとそゆ型が付く。
まーF#の中にいる限りは特に意識する必要ないが。
C#と連携したいなら覚えておくといいかも。

93 :デフォルトの名無しさん:2011/06/07(火) 12:29:28.85
F#のイディオム的なテクニックを教えてほしいな。
例えば、クロージャーとか簡単なもの。

使い始めたんだけど、上手く使えてるか自信がない。
F#ならではの書き方あったら教えてください。

94 :デフォルトの名無しさん:2011/06/07(火) 18:32:10.90
>>93
LINQは使ったことありますか?

95 :デフォルトの名無しさん:2011/06/07(火) 20:10:49.92
>>94
C#では使ったことがあります。

96 :デフォルトの名無しさん:2011/06/07(火) 23:39:58.82
>>93
関数型の場合何やるにも再帰。
とくに末尾再帰はしっかりみにつけるべき。

97 :デフォルトの名無しさん:2011/06/08(水) 10:21:18.89
>>93
非関数型プログラマ: forやwhileループを使う
関数型入門者: 再起を使う
中級者: map, foldをなるべく使う

これが割と参考になるかも。

98 :デフォルトの名無しさん:2011/06/08(水) 10:27:21.76
>>97
上級者は何を使うんだ?

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

100 :デフォルトの名無しさん:2011/06/08(水) 11:11:11.30
>>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 :デフォルトの名無しさん:2011/06/08(水) 21:30:46.81
F#って末尾最適化はやってくれている?

102 :デフォルトの名無しさん:2011/06/08(水) 22:13:07.22
コンパイル時に .tail がつく

103 :デフォルトの名無しさん:2011/06/08(水) 22:28:05.14
F#で文字の連結ってどうするんですか?
+でできるのはわかるんですが、これだと遅いですよね?

104 :デフォルトの名無しさん:2011/06/08(水) 22:50:12.35
いっておくがStringBufferみたいなものはないからな

105 :デフォルトの名無しさん:2011/06/08(水) 22:51:05.82
StringBuilder使えって言っておけばいいのかな

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

107 :デフォルトの名無しさん:2011/06/09(木) 05:16:59.39
>>106
コードkwsk

108 :デフォルトの名無しさん:2011/06/09(木) 05:19:42.26
.tailプリフィックス付いてても状況によっては無視されるって奴かな?

109 :106:2011/06/09(木) 08:39:36.40
あれーインタラクティブに流し込んだらもっとたくさん流し込んでもさっくり動くよ…
そもそもデバッガーだと末尾最適化しないとかあったっけ?いやそんなことないよね…

問題だけどインタラクティブでさっくり動いたコードとりあえずまるっと載せてみる

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 :106:2011/06/09(木) 08:40:17.92
//続き
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 :106:2011/06/09(木) 08:43:47.05
インデントが(;´Д`)

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 :106:2011/06/09(木) 08:44:27.70
スペースを入れてもダメか。俺\(^o^)/オワタ

113 :デフォルトの名無しさん:2011/06/09(木) 09:16:04.56
htmlレンダリングの問題だけで、スレに書き込まれてるソース的には空白やタブ残ってたと思った。

リンク貼る形式なら、gistや>11の使うといいと思う

114 :デフォルトの名無しさん:2011/06/09(木) 09:46:14.43
>>113
106ではないが、インデントを推測して貼ってみた。F#の構文がわからないので間違ってるかも
ttp://ideone.com/JW8dl

115 :デフォルトの名無しさん:2011/06/09(木) 10:06:12.85
>>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 :デフォルトの名無しさん:2011/06/09(木) 10:51:09.46
>>113の通りで、データとしては空白残ってるよ
俺はnavi2ch使ってるので普通にインデントが見れる
http://ideone.com/eE0C0


117 :106:2011/06/09(木) 11:37:16.53
>113-116
オマイラあり\(^o^)/

>115
いや、リストをなめていって見つかったらそれと、それ以降のやつをタプルで返してるのでそのやり方だとミリ。
なんかうまい高階関数あるのかもしれんが。

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

119 :デフォルトの名無しさん:2011/06/09(木) 12:06:19.24
>118
それ条件で振り分けるやつだからちょと違うと思われ

というか自己解決したかも。
プロジェクトの設定でビルドタブに"tail呼び出しの生成"って項目あってそれオンにしたらサックリ動いた。
ってもこれ付けたらデバッグとかしにくくなんのかな。
お騒がせしますた。

120 :デフォルトの名無しさん:2011/06/09(木) 12:12:10.32
※補足:
上の何も出さなくなって5秒ぐらいしてからStackOverFlowってのは例外になったのでVisualStudioが表示用とかに色々頑張ってる状態なんだろうね。


121 :デフォルトの名無しさん:2011/06/09(木) 12:34:18.75
末尾呼び出しを最適化すると、関数のトレースが出来なくなる。
だから、デバッグするときは、最適化切ったりするね。

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

123 :デフォルトの名無しさん:2011/06/11(土) 09:35:34.36
まぁそれいっちゃうとなんでもprintfデバッグで良くね?ってなるだろw

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

125 :デフォルトの名無しさん:2011/06/11(土) 14:19:14.54
んーまぁ再帰でもなんでその条件分岐になったのか流れ見たいときはある希ガスんなぁ
printfでもいいけど。printfでいいか。

126 :デフォルトの名無しさん:2011/06/11(土) 22:52:39.73
俺が想定してたのは再帰するしないで2分岐するだけの単純な再帰なんだけど
もしかするともっと複雑な再帰とかだとスタック見たいこともあるかも。
というかまあ見れる見れないだったら見れる方がありがたいのは確か。

ただ、再帰って、割とこうガチガチにロジカルに組まないとコンパイル通らない
ような気がしてて、スタック追っかけてまでデバッグする必要性あるかなあと
思ったりしたんだわ。

127 :デフォルトの名無しさん:2011/06/15(水) 09:53:18.75
FSUnitとVisualStudioのテストおのおのどんなメリット・デメリットあるのかすら。
C#使ってた時はVSのつと使ってたけどF#だと使いにくい?

128 :デフォルトの名無しさん:2011/06/15(水) 22:17:38.41
>>127
日本語?
母国語で頼む

129 :デフォルトの名無しさん:2011/06/15(水) 22:59:09.06
母国語だとさらにわからないのでは?

130 :デフォルトの名無しさん:2011/06/15(水) 23:15:40.40
中国語と韓国語なら読めるぜ

131 :デフォルトの名無しさん:2011/06/16(木) 12:49:59.57
Alt+EnterでInteractiveに流し込もうとするとエラー音してできない時があるんだけど、そういう現象出てる人います?
ウィンドウ→新規で別ウィンドウ出すとそのソースからでもできるんだけどいまいち発生する条件がわからん。

132 :デフォルトの名無しさん:2011/06/16(木) 18:49:46.13
結局TypeProviderってちょっとMeta情報与えてやることでF#でいろいろな情報がナイスに楽に使えるようになるってことでいいですか?(´・ω・`)
http://research.microsoft.com/apps/video/dl.aspx?id=150053&l=i

133 :デフォルトの名無しさん:2011/06/18(土) 10:35:56.55
オブジェクトのXML相互変換、こんな感じに書けたよ( ・∀・)ノ
F#いいね。

http://ideone.com/IokO4

134 :デフォルトの名無しさん:2011/06/24(金) 12:20:41.31
(・∀・)

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 :デフォルトの名無しさん:2011/06/27(月) 02:39:51.37
関数内で途中でreturn みたいに値を返したり
for内でbreakしたりしたいんですがどうやればよいですか?

136 :デフォルトの名無しさん:2011/06/29(水) 11:16:04.97
>>135
自分の場合はtryFindかtryPickかな。
どうしても途中で抜けたいなら、例外出して抜けるしかない。

自分もC++のコードをF#にしてみようと思ったときそこで悩みました。
結局、F#の繰り返しのfor文は全然使わないでList.mapかList.iterで処理するのがいいと思った。

137 :デフォルトの名無しさん:2011/07/01(金) 11:25:54.20
>>135
>関数内で途中でreturn みたいに値を返したり
条件で返す値を変える

>for内でbreakしたりしたいんですがどうやればよいですか?
手続き型のfor/whileは全て再帰だと思っていい

138 :デフォルトの名無しさん:2011/07/02(土) 00:42:03.47
そこで継続ですよ。

139 :135:2011/07/02(土) 01:56:39.99
>>136-138

レスありがとうございます.
let loopですっきりとした記述ができました.

140 :天使 ◆uL5esZLBSE :2011/07/05(火) 06:48:35.87
2011年、Ruby,Perl,PHP,Pythonって並べたときにさ
ここで、Ruby以外を選ぶ奴ってマジでなんなんだろうな


ゴミだし

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

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


ゴミの分際でw

142 :デフォルトの名無しさん:2011/07/10(日) 11:33:45.10
つ #light

143 :デフォルトの名無しさん:2011/07/12(火) 18:22:39.87
コード見てないが、意外とF#遅くてがっかし(´・ω・`)
http://users.softlab.ece.ntua.gr/~ttsiod/score4.html

144 :デフォルトの名無しさん:2011/07/17(日) 00:05:23.57
誰かseqのBuilderを実装しているソースどれかわかる人います?
2.0のソースはあるんだけど検索してもわからんです…

145 :デフォルトの名無しさん:2011/07/17(日) 10:04:55.63
>>143
コード見ようや・・・
http://d.hatena.ne.jp/einblicker/20110712/1310476340

146 :デフォルトの名無しさん:2011/08/07(日) 02:29:54.25
TIOBE TOP20入りしてた
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
msdnでドキュメント公開してるのも大きいんだろうな

147 :デフォルトの名無しさん:2011/08/20(土) 02:34:49.66
F#って何がいいの?
って言う人には
http://www.slideshare.net/bleistift/cvbf
これを見るといいかもね?

148 :デフォルトの名無しさん:2011/08/20(土) 02:38:41.36
あとこの辺も見ておくと
勉強になるかもね?
http://d.hatena.ne.jp/bleis-tift/20110803/1312345593

149 :デフォルトの名無しさん:2011/08/20(土) 06:04:16.54
>>147 >>148
なってないなぁ…と思う。
そんなもん見るよりも、ちゃんと時間取って実践F#読む方がずっといいよ。

150 :デフォルトの名無しさん:2011/08/20(土) 10:46:16.38
>>149
なってないなぁ…と思う。
そんなもん見るよりも、ちゃんと時間取ってExpert F# 2.0読む方がずっといいよ。

151 :デフォルトの名無しさん:2011/08/20(土) 11:46:15.04
Real-World Functional Programmingも宜しくね

152 :デフォルトの名無しさん:2011/08/20(土) 21:29:33.05
ちなみに何がなってないの?

153 :149: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にもなかった。。)

なにか、自分で設計する場合、他人が見てもわかりやすい方法などあれば教えてください。
よろしくお願いします。

155 :デフォルトの名無しさん:2011/08/21(日) 20:41:30.81
レコード型のメソッドにしてみてもいいんじゃないでしょうか

156 :デフォルトの名無しさん:2011/08/21(日) 21:20:09.09
>>154
ある型に対する一連の関数を知る方法は、簡単にはないですね。
AppDomainをリフレクションで総舐めとかすればそりゃ別ですが。

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

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

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

このあたり、私は、F#においてのみ特別不便だ、とは感じません。

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

158 :b:2011/08/21(日) 22:39:15.22
あ、let { Name = n } = xです。

159 :デフォルトの名無しさん: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#の人的なやつ

162 :デフォルトの名無しさん:2011/09/07(水) 22:33:14.58
Googleで F# site:hatena.ne.jp とかやると、いろいろ出てくる

163 :デフォルトの名無しさん:2011/09/07(水) 22:45:31.06
いないんだな、それが
というとアレだが、F# に特化してる人っているかね?
なにかしらほかの言語も使いつつ F# も嗜む的な
リベラルというか

164 :デフォルトの名無しさん:2011/09/07(水) 23:40:27.20
金融系の人とかはOCaml使ってた人も多いらしいし、
F#も出来る人多いんじゃないの?

165 :デフォルトの名無しさん:2011/09/08(木) 05:49:53.02
完全にF#で仕事、というのが日本にはない感じなので、そういう点で、人が見えないよね。
小物やらバッチに使うやらぐらいなら、そりゃあるだろうけれど。
かといってF#で何かOSSで作って公開、などという人もいないようだし。

166 :デフォルトの名無しさん:2011/09/08(木) 08:49:22.56
>>165
え?
ttp://d.hatena.ne.jp/taedium/20110604/p1

167 :デフォルトの名無しさん:2011/09/08(木) 12:11:17.65
F#セミナーいったら、
GUIアプリクライアントをF#で開発して納品した話をしてたよ。

168 :デフォルトの名無しさん:2011/09/08(木) 15:48:51.11
活用例とかになれば
最終的には.netのグルー言語以外の何でもねえんだし
scalaにしろ、元にくらべての使い勝手の話になるんだから面白い話じゃない
.net嫌いな人ってもういないの?

>>160>>161
それなら各言語のすごい人全部まとめれ

169 :デフォルトの名無しさん: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#やんないの?

172 :デフォルトの名無しさん:2011/09/09(金) 20:21:30.63
Javaは使いづらくてやっとレンガ、C#はそこそこ間に合ってしまうというのがあるんじゃ。
F#のほうが使いやすいけどねー

173 :デフォルトの名無しさん:2011/09/09(金) 20:32:09.20
Javaと違ってC#は糞言語じゃないから。

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

また、F#はC#と比べてIDEの支援が弱いのというデメリットがあるので
(特に WindowsForms、WPF、ASP.NET MVCなど主要ライブラリ関連)
F#のメリットとデメリットを天秤にかけた結果、C#でいいやって事になってしまう。

174 :デフォルトの名無しさん:2011/09/09(金) 20:34:00.21
むしろここの人たちがF#を使っている理由が知りたい

175 :デフォルトの名無しさん:2011/09/09(金) 20:40:54.41
C#を使ってると「パターンマッチ使いてぇ」
って場面は割とよくあるんだけど、
それだけの為にユーザーの環境にF#ランタイムを入れさせるのは憚られたので
結局使ってない。

.NET FrameworkにF#ランタイムが含まれてたら使ってたかもな。

176 :デフォルトの名無しさん:2011/09/09(金) 20:44:40.99
俺的にはパターンマッチ、再起、部分適用、ユニットオブメイジャー、モナド含め、コードが書きやすいから。

177 :デフォルトの名無しさん:2011/09/09(金) 21:42:20.97
>>171
インテリセンスさいこーってことでしょ
まー.NET的にC#が勝ち馬であるとに異論はない
いまんとこ

>>173
Javaも別に糞じゃないと思うが
古臭いならわかる

178 :デフォルトの名無しさん:2011/09/09(金) 22:58:15.35
C#使っててLINQと拡張メソッドとラムダだらけになるとなんかもやもやしてくる

179 :sage:2011/09/09(金) 23:36:12.15
C#でLINQと拡張メソッドとラムダ使ってドヤ顔カッコワルイwwww

180 :デフォルトの名無しさん:2011/09/09(金) 23:46:26.26
まあ、でもLINQの範囲のデータ処理はC#のほうがいいな

181 :デフォルトの名無しさん:2011/09/10(土) 00:09:06.90
Start F#
http://slideshare.net/osiire/3-8660480

182 :デフォルトの名無しさん:2011/09/10(土) 00:09:37.07
bleisさんフォローしておけばいいんじゃね?

183 :デフォルトの名無しさん:2011/09/10(土) 07:03:34.56
>170 意味不明だったけど、これってFortran#っていうネタか。

184 :デフォルトの名無しさん:2011/09/10(土) 13:36:11.11
外人フォローしたほうがいいよ

185 :デフォルトの名無しさん:2011/09/10(土) 14:18:54.64
>>184
リストくれ

186 :デフォルトの名無しさん:2011/09/10(土) 16:20:27.90
ボスは、アカウントあるけどつぶやかなかった気がするな

187 :デフォルトの名無しさん:2011/09/13(火) 21:07:32.69
>>186
ボス?ドンサイム?

188 :デフォルトの名無しさん: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サポート増えるみたい。

189 :デフォルトの名無しさん:2011/09/16(金) 09:23:30.60
ファンクタ対応したのかな

190 :デフォルトの名無しさん:2011/09/16(金) 11:56:24.12
従来交わることのなかった OCaml 使いと C# 使いがそれぞれ別の切り口で文句を言いに集うスレはここですか?

191 :デフォルトの名無しさん:2011/09/16(金) 13:05:24.76
>>190
仕事で両方使ってる人は、期待することはあっても文句はいわんだろ。

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

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

まだ立ち上がって数年の言語だし、捨てられないでちゃんとバージョンアップしてくれてるから、
まだまだこれからと見るべきでしょう。


192 :デフォルトの名無しさん:2011/09/16(金) 17:08:03.30
Type Providerってなんなのか教えて下さい

193 :デフォルトの名無しさん:2011/09/16(金) 17:10:27.45
型を定義することなくデータソースから何らかの方法でメタデータを取得し静的な型として扱えるようにするものって感じかの。


194 :デフォルトの名無しさん:2011/09/16(金) 17:31:00.24
>>193
ありがとうございます
型定義を手で書かなくても済むようにするための
メタプログラミングの仕組み、みたいな感じでしょうか。。。

195 :デフォルトの名無しさん: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のドキュメントがもう揃ってるんかー

196 :デフォルトの名無しさん: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#も使えそう。

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

198 :デフォルトの名無しさん:2011/09/18(日) 07:06:06.41
F# 3.0 Quick Preview
http://www.slideshare.net/igeta/fsharp-langupd-fpm2011

199 :デフォルトの名無しさん:2011/09/18(日) 09:43:03.31
C++のようなメタプログラミングができるのですか?

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

201 :デフォルトの名無しさん: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)英語で正常に表示された。

202 :デフォルトの名無しさん: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

203 :デフォルトの名無しさん: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に対応するメソッドを持ったクラスなんでしょうか?

教えてください、よろしくお願いします。

205 :デフォルトの名無しさん: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を返すのでなく、元のクラスが何か? を得る関数という意味です。)

207 :デフォルトの名無しさん:2011/09/27(火) 13:01:19.65
F#の中では知らん。
Reflection使ってbaseクラスたどってみては。
C#から見ると多分Aとして見れると思う。

208 :デフォルトの名無しさん:2011/09/27(火) 13:14:29.26
普通に
type A = | B
hoge.GetType().Name
;;
でAって出てきた

209 :デフォルトの名無しさん:2011/09/27(火) 13:20:04.19
type A =
| B
| C of int
let hoge = C 10
hoge.GetType().Name
;;
はCだった

210 :206:2011/09/28(水) 14:57:18.94
みなさんありがとうございます。
自分なりの理解はこんな感じになりました (↓素人理解です)

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

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

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

※ 素人の理解ですが。

211 :デフォルトの名無しさん: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#ではクラスの特別なものが、判別共用体や、レコードのようなきがする。

213 :デフォルトの名無しさん:2011/10/01(土) 06:37:51.43
特別なクラスというと語弊がある。
MSIL上は継承関係とか種類を表すタグとかが一定ルールに従っているただのクラスであり、其れが自動生成されているだけ。

214 :デフォルトの名無しさん:2011/10/12(水) 10:06:47.51
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

46位か…… なんかえらい順位下げちゃったね。何でだろう。

215 :デフォルトの名無しさん:2011/10/12(水) 14:56:32.45
1%切ってるところは誤差だろ。

216 :デフォルトの名無しさん:2011/10/12(水) 18:43:17.12
TIOBEみたいな腐れ調査機関とか相手にすんなよ…

217 :デフォルトの名無しさん:2011/10/22(土) 20:48:19.24
まあ、F#が20位以内というのはおかしいよね。

218 :デフォルトの名無しさん:2011/10/23(日) 03:15:14.94
しかしそれでもScalaより上って・・・・・目くそ鼻くそとはこのことか。

はやくJavaの時代終わらないかなぁ・・・・

219 :デフォルトの名無しさん:2011/10/23(日) 12:42:45.14
>>218
scalaは関数脳に慣れてない人からは関数型言語部分に苦しんで、haskellやOCamlで関数脳になった人からは関数型言語としてはキモイから。。。

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

haskellもGUIに特化した専門書とか出ないと伸びないんだろうな。。。


220 :デフォルトの名無しさん:2011/10/23(日) 14:20:16.52
>>219
haskell でguiな本書こうか?

221 :デフォルトの名無しさん:2011/10/23(日) 14:21:36.40
>>220
ぜひ!!


222 :デフォルトの名無しさん:2011/10/23(日) 14:52:33.37
>>221
gtk2hs でもいいっすか?
haskell-qtはまだ使ったことないんです、、、

223 :デフォルトの名無しさん:2011/10/23(日) 15:04:38.88
>>222
自分もgtk2hsの勉強始めたばかりなんで、渡りに船です


224 :デフォルトの名無しさん:2011/10/23(日) 19:13:01.51
>>223
とりあえず開始するかもしれないです。
でも期待はしないでください、、、、

225 :デフォルトの名無しさん:2011/10/23(日) 20:00:06.22
>>224
うい


226 :デフォルトの名無しさん:2011/10/23(日) 20:32:16.83
たぶん原稿の成長とcarettahのコード品質は同期するだろー...λ

227 :デフォルトの名無しさん:2011/10/26(水) 23:09:18.46
よく知らんが買わんぞ?

228 :デフォルトの名無しさん:2011/10/27(木) 09:05:20.27
>>227
全く売れないのも面白いのでwwww

229 :デフォルトの名無しさん:2011/11/09(水) 16:59:13.93
>>220
書いて

230 :デフォルトの名無しさん:2011/11/09(水) 17:17:18.28
現在の購入予定者2名


231 :デフォルトの名無しさん:2011/11/09(水) 19:01:13.54
良い本だったら買うし良い本ではなかったら買わない

232 :デフォルトの名無しさん:2011/11/09(水) 19:04:24.86
>>231
同人誌レベルなら、、

233 : ◆QZaw55cn4c :2011/11/11(金) 03:51:46.57
>>220
買います

234 :デフォルトの名無しさん:2011/11/11(金) 04:23:18.13
>>220
SOEより凄いなら買う

235 :デフォルトの名無しさん:2011/11/11(金) 13:59:41.00
https://github.com/fsharp
githubに、fsharpオープンソースコミュニティーというのがあるのか。
donsymeがいると公式感があるな。
mono開発者のicazaも入ってる。
F#はClojureCLRと違って余裕あるからか、monoとの互換性も重視してたの思い出した。

236 :デフォルトの名無しさん: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

237 :デフォルトの名無しさん:2011/11/11(金) 14:18:47.50
作ってるのはSocket IOだった。
Fracture/Pipelet/Frackって分かれてる。
future-ioはSSDだった・・・orz

238 :デフォルトの名無しさん:2011/11/14(月) 01:37:08.30
M$がhtml5の構想に弱音を吐いて.net戦略を撤退したらf#ってどうなるんだろ

239 :デフォルトの名無しさん:2011/11/14(月) 01:51:46.03
VisualOcaml作って欲しい

240 :デフォルトの名無しさん:2011/11/14(月) 01:54:35.63
VisualHaskellを(ry


241 :デフォルトの名無しさん:2011/11/14(月) 02:54:08.28
F#はType Classの要望が強かったけど
.netの型システムとの互換性を重視して入れなかったとどっかで言ってたから
H#はないんじゃないの?

ちなみに"Visual Haskell"は既にあるよ

242 :デフォルトの名無しさん:2011/11/14(月) 06:45:33.31
>>241
>ちなみに"Visual Haskell"は既にあるよ

そうだった。VS2010に対応したかな?少しは安定したかな?
全然使えなさそうですっかり忘れてた

>F#はType Classの要望が強かったけど
>.netの型システムとの互換性を重視して入れなかったとどっかで言ってたから

・・・orz


243 :デフォルトの名無しさん:2011/11/14(月) 09:38:24.83
Haskellようしらんのだが、型クラスあるとなにがどう幸せになるん?


244 :デフォルトの名無しさん:2011/11/14(月) 13:06:42.36
>>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 :デフォルトの名無しさん:2011/11/14(月) 15:21:15.27
Eq,Ordが型クラスで、List aがインスタンスだから、例としてはこっちが適切か

large xs ys | xs < ys = (ys,xs)
large xs ys = (xs,ys)


246 :デフォルトの名無しさん:2011/11/14(月) 19:28:12.45
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 :246:2011/11/14(月) 20:27:08.67
インポートは出来ますた

http://beyondrelational.com/blogs/niladribiswas/archive/2011/08/09/how-to-call-a-f-dll-from-c.aspx

248 :デフォルトの名無しさん:2011/11/14(月) 20:53:17.11
F#側のdllをC#でインポートするだけでしょ?

249 :デフォルトの名無しさん:2011/11/17(木) 21:05:56.68
>>246
ねーよ

250 :デフォルトの名無しさん:2011/11/17(木) 21:56:28.38
この先長そうだね。
コンパイラと実行ファイル
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 :デフォルトの名無しさん:2011/11/18(金) 21:39:55.75
え?

252 :デフォルトの名無しさん:2011/11/19(土) 01:58:24.47
いや、この発想はまだまだ用語や概念判ってないのかなと思って
exec(1.fs); //this is c# code

253 :デフォルトの名無しさん:2011/11/19(土) 23:55:32.57
F#のevalは興味あるんだけどfsiのソース見ればいいのかな?

254 :デフォルトの名無しさん:2011/11/20(日) 19:04:44.86
ocaml のfunctor の代替手段はF#だとなんですか?



255 :デフォルトの名無しさん:2011/11/24(木) 21:32:53.28
XML に Serialize したいんだけど、mutable にするしか方法ない?

ttp://cs.hubfs.net/topic/None/57413
↑は見たんだが、02-SerializeXml.zip はダウンロードできないみたい

256 :デフォルトの名無しさん:2011/12/10(土) 12:47:04.33
http://d.hatena.ne.jp/zecl/20111004/p1
F#でぷよぷよだって。コード全然読めん

70 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)