【.NET】F#について語れ2【OCAML】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2011/05/01(日) 02:46:49.52OCAMLの流れを汲むこの言語、いろいろと面白そうなことができそう。
そろそろ日本語の情報が充実してきそうなこの言語について、幅広く語れ。
http://www.fsharp.net/
前スレ
【.NET】F#について語れ【OCAML】
http://hibari.2ch.net/test/read.cgi/tech/1186030985/
関連スレなどは >>2-
0002デフォルトの名無しさん
2011/05/01(日) 02:52:55.61http://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
0003デフォルトの名無しさん
2011/05/01(日) 02:58:27.71注意事項 http://info.2ch.net/wiki/index.php?%C7%A6%CB%A1%C4%A1%B4%AC%CA%AA
0004デフォルトの名無しさん
2011/05/01(日) 03:34:36.83Mac/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環境が使えます。
0005デフォルトの名無しさん
2011/05/01(日) 03:42:19.97http://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
0006デフォルトの名無しさん
2011/05/01(日) 04:49:34.58乙
0007デフォルトの名無しさん
2011/05/01(日) 10:03:33.09*型推論:
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#に起こるに違いない!と言うのも本当かもしれない。
---------
要望があったやつ追加
0008デフォルトの名無しさん
2011/05/01(日) 11:06:11.34名古屋ではF#が結構使われているという話を聞いたんだけど、やっぱり
自動車関係の仕事が多いからなのか?
0009デフォルトの名無しさん
2011/05/01(日) 11:45:09.38これが関係してないか?
0010デフォルトの名無しさん
2011/05/01(日) 13:04:53.260011デフォルトの名無しさん
2011/05/01(日) 13:39:03.13IdeOneも使える事を知っとくと良いよ。
hello worldを書いてみた。
http://ideone.com/ze0wq (こうやってソースと実行結果を貼ることもできる)
0012デフォルトの名無しさん
2011/05/01(日) 18:56:09.06F# InteractiveのWebコンソールとしては、これが便利かも。
Try F# in your web browser
http://tryfs.net/
0013デフォルトの名無しさん
2011/05/02(月) 23:26:40.62FはFunctionのF?
あとC#がC++++から#になっているのは理解できるけど、
F++はもちろんF言語なんて聞いたことがないんだけど。
0014デフォルトの名無しさん
2011/05/03(火) 00:03:14.450015デフォルトの名無しさん
2011/05/03(火) 00:08:59.63j#の後釜だからじゃね?
fは探せば有りそうだし
0016デフォルトの名無しさん
2011/05/03(火) 00:12:28.32MSに関係する範囲では、C#,F#,J#のみっぽいけど。
http://en.wikipedia.org/wiki/List_of_CLI_languages
0017デフォルトの名無しさん
2011/05/03(火) 00:20:06.88schemeが#Sなのにcommon LispがL#な所は狡猾さを感じるなw
宗教論争とか起きなかったんかね
0018デフォルトの名無しさん
2011/05/03(火) 00:57:40.67lisp系でメンテナンスが続いてるのは、結局Clojure(CLR)らしい。
https://github.com/richhickey/clojure-clr/downloads
0019デフォルトの名無しさん
2011/05/03(火) 03:25:35.020020デフォルトの名無しさん
2011/05/04(水) 06:22:20.80http://books.google.com/books?id=NcrMkjVxahMC&lpg=PA270&ots=pln0IBigeG&pg=PA99#v=onepage&q&f=false
Expert F#2.0 p.99 seq下のほう
0021デフォルトの名無しさん
2011/05/04(水) 06:26:13.36F#2.0 は、こっち。
http://books.google.com/books?id=y3kaQxIns0oC&lpg=PP1&pg=PA96#v=onepage&q&f=false
0022デフォルトの名無しさん
2011/05/04(水) 08:20:27.450023デフォルトの名無しさん
2011/05/06(金) 09:50:41.490024デフォルトの名無しさん
2011/05/09(月) 19:18:09.170025デフォルトの名無しさん
2011/05/09(月) 20:41:26.84MSならF#、それ以外ならScala。
構文は全然違うけど言語パラダイムはそっくりだから俺は両方勉強してるぜ。なかなかためになる。
0026デフォルトの名無しさん
2011/05/09(月) 22:19:12.870027デフォルトの名無しさん
2011/05/09(月) 23:43:25.510028デフォルトの名無しさん
2011/05/10(火) 08:47:38.70>>7 に書いてある。
0029デフォルトの名無しさん
2011/05/10(火) 14:09:41.30っていうか、「ファーストクラスの関数」でよくね
tail call elimination
nested functions
automatic currying
cons, tuple
list comprehension
あたりも比較項目につけくわえていい気がする
0030デフォルトの名無しさん
2011/05/10(火) 20:47:06.710031デフォルトの名無しさん
2011/05/10(火) 22:09:08.41そっくりなところを比べればそりゃそっくりだろうさ
0032デフォルトの名無しさん
2011/05/10(火) 23:07:45.67*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# -> ○
0033デフォルトの名無しさん
2011/05/10(火) 23:23:15.17Scala->○
F#->○に近い△
C#,Jave->×
って感じ?ちょっと不勉強なので正確かわからん。
0034デフォルトの名無しさん
2011/05/10(火) 23:50:49.02Scala は JVM の制限とかで tail call elimination ができないときがあるような
@tailrec アノテーションをつけておけば、できかなったときは教えてくれるけど
Scala は list comprehension あるんだっけ
for 式だったら、あれはどちらかというと Haskell の do に近いような
0035デフォルトの名無しさん
2011/05/11(水) 05:38:03.25tail callは64ビット版.NET Framework は、ILがTailとマークしてなくても最適化してくれる(制限あり)。
あと、LINQはある意味list comprehensionsの一種なので、C#が×は納得いかない。
0036デフォルトの名無しさん
2011/05/11(水) 09:09:48.47Haskellでの[x+y | x <- [0..9], y <- [0..9], x<y] みたいなのもLINQを使えば書けるのか?
0037デフォルトの名無しさん
2011/05/11(水) 09:21:52.16from x in Enumerable.Range(0, 10)
from y in Enumerable.Range(0, 10)
where x < y
select x + y
とかそんな感じだろう
0038デフォルトの名無しさん
2011/05/17(火) 09:29:46.65F#にMonotouchが対応するのって、そもそも技術的に難しいんだっけ? Dictionary<int,Hoge>とかを使えないとかの制限にからんで。
それともF#なんかマイナー言語相手にしてる暇ねーぜヒャッハーってだけ?
FSharp.CoreとかのライブラリーをILAssembly使ってターゲット変えてゴニョゴニョすれば動くようになるとか言ってる人もいたんだけど。
Silverlightで同じようなことしてる人のBlogあったんだけどリンク切れちゃってた。
暇な人は"Reusing-NET-Assemblies-in-Silverlight"でぐぐって最初のエントリーのキャッシュ見てくんなまし。
0039デフォルトの名無しさん
2011/05/18(水) 00:17:22.590040デフォルトの名無しさん
2011/05/18(水) 08:05:24.37被害妄想?
0041デフォルトの名無しさん
2011/05/18(水) 08:28:33.12http://d.hatena.ne.jp/atsushieno/touch/20110407/p1 の最後の段落
0042デフォルトの名無しさん
2011/05/26(木) 01:34:35.70なまじC#がよくできてるから
0043デフォルトの名無しさん
2011/05/26(木) 01:37:10.04どんだけJavaはアレなんだよ。
0044デフォルトの名無しさん
2011/05/26(木) 08:00:06.97言う人の言うことはそのままF#にも当てはまるんだよね。
ScalaがF#に比べて人気ある理由はC#がJavaより良くできているという以外に
構文がJavaから大きく離れてはいないという点があると思う。Javaコードを
コピペして微修正すればScalaコードとして動くし、Scalaコードを見てもある程度
読めそうな気になるから移行しやすいんだよね。
0045デフォルトの名無しさん
2011/05/26(木) 08:01:26.91一方F#は構文が違いすぎるし、初見だと全然読めない。このとっつきにくさが
結構効いているんじゃないかな。
でもF#は関数型言語としてScalaよりずっといい線行っている(構文はキモいけど)
ので、Scalaへの大移動が現実になったときC#erはF#への移動を準備すべき。
C#erがレガシーな理由のみで残りつづけて老害とならないようになってほしい。
0046デフォルトの名無しさん
2011/05/26(木) 22:48:33.47F#はあくまでもC#の補完。.NETファミリーの関数型言語の位置づけ。
scalaは関数型的な使い方をしなくてもいろいろ遊べる。
最初の関数型言語にScalaを選んでしまった場合、
Good Javaの部分だけで腹いっぱいになって関数型までたどり着けないことが多い。
0047デフォルトの名無しさん
2011/05/26(木) 23:11:20.22Scalaと同じ機能がある未来のJavaは構文がもっと複雑なんだろうな。
0048デフォルトの名無しさん
2011/05/27(金) 00:43:20.310049デフォルトの名無しさん
2011/05/30(月) 19:59:14.67で、F#難し過ぎて、はやくも挫折しそうなんだけど・・・
ちょっと質問。
クラスのスコープ内に関数を定義したかったらC#の場合、こうできる。
class 振り分け{
double[] ratio;
public 振り分け(){
initRatio();
}
private initRatio(){うんたらかんたら}
}
同じことをF#でやる場合staticなメンバにしないといけないのかな?
type 振り分け=
class
val mutable ratio: float[]
static member initRatio=うんたらかんたら
new(){ratio=initRatio}
うーん、ようわからんwww
0050デフォルトの名無しさん
2011/05/30(月) 20:03:43.87インデント?空白?によって
ブロック的なものが決まることかなぁ。
だから、必然的に自動整形ってできないんだよね?
複数行選択後のtab/shift+tabができなかったら、
発狂するレベルだねw
あとは、クラスを定義する時の修飾子の多さも、ちょっとうんざりだよね;;
どういう書き方が一番エレガントなんだろう・・・
関数を定義する順番に依存しちゃうってのも、なんというか・・・
そこら辺はやっぱりscalaの方が上っぽい?
0051デフォルトの名無しさん
2011/05/30(月) 22:37:13.86・オフサイドルールはうつくしい。まだまだシロートのようだな
・クラスあんまし書かないのがF#流だから木にスンナ
・偽関数型言語でよければScalaでおk
0052デフォルトの名無しさん
2011/05/30(月) 22:48:20.11カッコよりはインデントの方が良いとは思うが・・・
自動整形欲しいよorz
クラス使わないって厳しくない?
Scalaのどの辺が偽なの?F#も偽だと思うけど。
0053デフォルトの名無しさん
2011/05/31(火) 00:54:09.98type 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()
0054添削お願いします
2011/05/31(火) 18:17:18.40type 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)
0055添削お願いします
2011/05/31(火) 18:19:35.69static 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..])+")"
0056添削お願いします
2011/05/31(火) 18:22:50.97疑問点
・OP2をletで定義できないのはなぜだろうか?
・intからfloatへの変換は自動でできないのだろうか?
0057デフォルトの名無しさん
2011/05/31(火) 21:12:59.18例えばList.reduceはJavaでもC#でも、簡単に実装できる。
だけど、気軽に使うためには、
foldに与える関数を気軽に定義できなきゃいけない。
T arg_reduce(T t, S s)
こういう関数を簡単に定義できる枠組みを与えるのが関数型言語なんだろうか?
0058デフォルトの名無しさん
2011/05/31(火) 22:05:41.56>・OP2をletで定義できないのはなぜだろうか?
以下のページの「let バインディングと do バインディング」が参考になるかも。
ttp://msdn.microsoft.com/ja-jp/library/dd233205.aspx
>・intからfloatへの変換は自動でできないのだろうか?
「プログラミングF#」の「2.1.3 変換処理」に、
「F#言語は暗黙的な型変換を行わないことを1つの方針としています。」
とか書いてあるんで無理なんじゃないかな。
0059デフォルトの名無しさん
2011/05/31(火) 22:51:27.68>静的メソッドからはこのフィールドにアクセスできません。
って書いてありました。ありがとう。
それはそうとdoバインディングってなんだろw
0060デフォルトの名無しさん
2011/05/31(火) 23:12:52.10問題は単にF#が便利なのかどうかだわ。
0061デフォルトの名無しさん
2011/06/01(水) 00:00:04.86クラスブラウザがVSに実装されるまでは大規模開発が難しいのと
GUIエディタが無い現状はC#の代替にはならないかな、と思った。
F#は関数をさくさく作れる。
C#のクラス定義は単純明快だけど、
F#のクラス定義の方法は難解で、冗長で、読みにくいが、改行は少ない。
F#のyieldは便利。F#の()は読みにくい。F#のSeqは美しい。
F#は基本的に読みにくい。
0062デフォルトの名無しさん
2011/06/01(水) 00:26:26.68F#のクラス定義の方法は
難解で読みにくいってのはまあ慣れと好みだが
冗長でってのはどうかね?
C#のクラス定義は単純明快ってのは
私はC#のクラス定義に慣れているんです
って以外に意味を持たない主張に思えるが。
0063デフォルトの名無しさん
2011/06/01(水) 01:15:18.81memberは明らかにいらない子
0064デフォルトの名無しさん
2011/06/01(水) 07:35:25.35全然明らかじゃないからkwsk
0065デフォルトの名無しさん
2011/06/01(水) 09:04:05.360066デフォルトの名無しさん
2011/06/01(水) 09:32:09.49クラスを定義してるのが明らかなのだから、
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もクソ仕様。
0067デフォルトの名無しさん
2011/06/01(水) 18:11:51.650068デフォルトの名無しさん
2011/06/01(水) 18:40:51.63関数の中に関数をかけることだな。
しかも、F#における関数はOOPでいう関数ではなく、
OOPのクラスに相当する。
逆に不便だなって思うことは、共通して使う関数を作った時に
どこへ置けばいいかわからないこと。F#はスコープの制御がダメだね。
0069デフォルトの名無しさん
2011/06/01(水) 20:34:34.08OCaml互換。C#の人かな。\x ->ならまだしもx ->はさすがに無理くねーか。
>>67
気持ちはわかります。
>>66
クラス内にはletとdoもかけるぞ。あとコンストラクタはメンバじゃねえ。
>>68
どこ置けばいいかわからない?F#でだけ?どの言語でも同じじゃまいか。
0070デフォルトの名無しさん
2011/06/01(水) 20:37:59.90整形されたコードしかコンパイル通らんのだから
そもそも整形する必要ないじゃんか。
まあ俺もオフサイドルール嫌いだけど。
0071デフォルトの名無しさん
2011/06/02(木) 12:42:05.73他の選択肢ってなんだろ?
一つは{}だよね。
0072デフォルトの名無しさん
2011/06/02(木) 15:49:55.04FSharpUnion<Employee>.get_Manager的な。
isManagerでしてから普通にキャストすればよかったんだっけ?
0073デフォルトの名無しさん
2011/06/02(木) 16:13:53.96つ Verbose syntax
0074デフォルトの名無しさん
2011/06/02(木) 20:42:24.42デバッグの途中で
add 1 2
とか打てたらいいんだけど・・・
F#ってデバッグが難しいね;;
0075デフォルトの名無しさん
2011/06/02(木) 21:59:27.33サブクラスとか、キャストとか、なんか根本的に間違ってないか。
>>74
openは流せる。まさかopen Listがエラーだからとか言わないよね?
0076デフォルトの名無しさん
2011/06/02(木) 22:05:03.83あぁ、ごめん。書き方が悪かった。
自分で定義したnamespaceを
openすることができないってことでした。すいません。
0077デフォルトの名無しさん
2011/06/02(木) 22:44:29.66いやC#からだとUnionそういう風にしか扱えなくなかったっけ?
そのUnionのインスタンスでIsManagerとかよべるけど。ManagerであるUnion値をManagerとして扱いたいときにどうしたらいいかって話。
もっとまともな方法あったっけ?
0078デフォルトの名無しさん
2011/06/03(金) 00:30:20.24type Employee = ... | Manager of Hoge の場合↓
var emp = Employee.NewManager(hoge);
if (emp.IsManager) {
var mngr = ((Employee.Manager)emp).Item;
// dosomething
}
だからDesign Guidelinesにはまんま使うなと書いてある。
0079デフォルトの名無しさん
2011/06/03(金) 09:26:19.890080デフォルトの名無しさん
2011/06/03(金) 09:28:24.980081デフォルトの名無しさん
2011/06/03(金) 09:50:11.17協力な型推論、nullがない、パターンマッチ、関数内関数ができる、対話環境、並列計算に強い
とかじゃね。
0082デフォルトの名無しさん
2011/06/03(金) 09:55:29.01パターンマッチ、並列計算に強い はおもしろそう
0083デフォルトの名無しさん
2011/06/03(金) 10:13:46.63あーやっぱりそんな感じかー
>79
自分も最初は悩んでたけど、最近はなんも困ってないな。なんでだろ。途中でうまく止めて値見るのとWriteLineで出しとくのとヘルパーとか使ってFSharpFunc楽に実行できるようにしたところか?
そもそもDebugが必要になる羽目になることが少なくなったというのもある気がするが。
>80
Debugしながらでもソースがいじれるところ。
0084デフォルトの名無しさん
2011/06/03(金) 10:16:25.55Debugしながらでもソースがいじれる・・・イイ!
0085デフォルトの名無しさん
2011/06/03(金) 11:02:45.96実行時エラーがない方が運用上大いなるなメリットがあるのは当然だろJK
quick sortの発明者アントニーホーアはnullは10億ドルの過ちであると言っている。
ttp://news.livedoor.com/article/detail/4047613/
0086デフォルトの名無しさん
2011/06/03(金) 15:53:21.29Anders Hejlsbergも「nullableの概念は参照型/値型の概念とは独立させておくべきだった」っていってるしね。
非nullable参照型は欲しい。
0087デフォルトの名無しさん
2011/06/03(金) 18:18:05.09関数型言語にはnullは必要ないよ。関数型プログラマはnull参照エラーみたいなアホみたいな実行時エラーとは
無縁の世界でプログラムしているよ。
0088デフォルトの名無しさん
2011/06/05(日) 00:00:41.87FSharpFuncってなんですか?
数値計算のプログラムを作ってる時は、
デバッグは絶対必要なんですよね・・・
関数の形で定義してると、途中で止めても
中の数値が見れないんですよねorz
let x=f a
とかしちゃってる時に、
f 1
の値を見る方法がないと、数値計算のプログラムのデバッグは
無理かなーと。
現状のF#を数値計算に使うと死ぬかも・・・・
0089デフォルトの名無しさん
2011/06/05(日) 06:40:44.23let dbg x = printfn "*debug:%A" x; x;;
こんな感じで使う。
[1..10] |> List.map ((+) 1) |> dbg |> List.map(fun x -> dbg(float x / 2.0));;
0090デフォルトの名無しさん
2011/06/05(日) 12:12:50.78%Aでリスト(行列)を全表示できるのかな?
そうなら、そういう関数作っておけば、確かに楽そうだね。
DOS窓かよって不満はあるけどw
それやってみるよ。ありがと。
また、ただ、いろいろ細かい状態が知りたかったりするから
デバッグ中に値が知りたいというニーズは多いし、
あとはけっこう量が多いんだよね・・・うーん。
0091デフォルトの名無しさん
2011/06/05(日) 12:13:56.070092デフォルトの名無しさん
2011/06/05(日) 12:25:05.75関数の型。クロージャ作るとそゆ型が付く。
まーF#の中にいる限りは特に意識する必要ないが。
C#と連携したいなら覚えておくといいかも。
0093デフォルトの名無しさん
2011/06/07(火) 12:29:28.85例えば、クロージャーとか簡単なもの。
使い始めたんだけど、上手く使えてるか自信がない。
F#ならではの書き方あったら教えてください。
0094デフォルトの名無しさん
2011/06/07(火) 18:32:10.90LINQは使ったことありますか?
0095デフォルトの名無しさん
2011/06/07(火) 20:10:49.92C#では使ったことがあります。
0096デフォルトの名無しさん
2011/06/07(火) 23:39:58.82関数型の場合何やるにも再帰。
とくに末尾再帰はしっかりみにつけるべき。
0097デフォルトの名無しさん
2011/06/08(水) 10:21:18.89非関数型プログラマ: forやwhileループを使う
関数型入門者: 再起を使う
中級者: map, foldをなるべく使う
これが割と参考になるかも。
0098デフォルトの名無しさん
2011/06/08(水) 10:27:21.76上級者は何を使うんだ?
0099デフォルトの名無しさん
2011/06/08(水) 10:47:37.21こういうのにfold使うのなんか微妙に違和感あるんだけれどこんなもんかね@関数型初心者。
0100デフォルトの名無しさん
2011/06/08(水) 11:11:11.30let 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
0101デフォルトの名無しさん
2011/06/08(水) 21:30:46.810102デフォルトの名無しさん
2011/06/08(水) 22:13:07.220103デフォルトの名無しさん
2011/06/08(水) 22:28:05.14+でできるのはわかるんですが、これだと遅いですよね?
0104デフォルトの名無しさん
2011/06/08(水) 22:50:12.350105デフォルトの名無しさん
2011/06/08(水) 22:51:05.820106デフォルトの名無しさん
2011/06/08(水) 23:17:37.07そもそも要素一つずつ減らしてるから無限ループになるはずないのに4千件ぐらいでStackOverFlowになるってなんか変だ。
Console.WriteLineで出力しても途中まで減ってってるのに突然何も出さなくなって5秒ぐらいしてからStackOverFlowが出てもうわけわかめ(´;ω;`)ブワッ
0107デフォルトの名無しさん
2011/06/09(木) 05:16:59.39コードkwsk
0108デフォルトの名無しさん
2011/06/09(木) 05:19:42.260109106
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が空ならその時点のを結果とする。有るなら続き。
0110106
2011/06/09(木) 08:40:17.92let 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)
0111106
2011/06/09(木) 08:43:47.05let 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が空ならその時点のを結果とする。有るなら続き。
0112106
2011/06/09(木) 08:44:27.700113デフォルトの名無しさん
2011/06/09(木) 09:16:04.56リンク貼る形式なら、gistや>11の使うといいと思う
0114デフォルトの名無しさん
2011/06/09(木) 09:46:14.43106ではないが、インデントを推測して貼ってみた。F#の構文がわからないので間違ってるかも
ttp://ideone.com/JW8dl
0115デフォルトの名無しさん
2011/06/09(木) 10:06:12.85よくわからんが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
0116デフォルトの名無しさん
2011/06/09(木) 10:51:09.46俺はnavi2ch使ってるので普通にインデントが見れる
http://ideone.com/eE0C0
0117106
2011/06/09(木) 11:37:16.53オマイラあり\(^o^)/
>115
いや、リストをなめていって見つかったらそれと、それ以降のやつをタプルで返してるのでそのやり方だとミリ。
なんかうまい高階関数あるのかもしれんが。
0118デフォルトの名無しさん
2011/06/09(木) 11:51:17.37List.partition : ('T -> bool) -> 'T list -> 'T list * 'T list
ttp://msdn.microsoft.com/ja-jp/library/ee353782.aspx
が近いけどちょっと違うか。
こういう場合は素直に再帰をした方がいいのかな?
0119デフォルトの名無しさん
2011/06/09(木) 12:06:19.24それ条件で振り分けるやつだからちょと違うと思われ
というか自己解決したかも。
プロジェクトの設定でビルドタブに"tail呼び出しの生成"って項目あってそれオンにしたらサックリ動いた。
ってもこれ付けたらデバッグとかしにくくなんのかな。
お騒がせしますた。
0120デフォルトの名無しさん
2011/06/09(木) 12:12:10.32上の何も出さなくなって5秒ぐらいしてからStackOverFlowってのは例外になったのでVisualStudioが表示用とかに色々頑張ってる状態なんだろうね。
0121デフォルトの名無しさん
2011/06/09(木) 12:34:18.75だから、デバッグするときは、最適化切ったりするね。
0122デフォルトの名無しさん
2011/06/11(土) 08:45:12.01でも再帰呼び出し時のスタック トレースが必要なことってある?
printf デバッグでいいんじゃねぇかと思うんだけど。
0123デフォルトの名無しさん
2011/06/11(土) 09:35:34.360124デフォルトの名無しさん
2011/06/11(土) 14:00:10.41どこからどう呼び出されてきた関数かはデバッグに不可欠
だけど、再帰の分に関しては必要ないんじゃね?って。
0125デフォルトの名無しさん
2011/06/11(土) 14:19:14.54printfでもいいけど。printfでいいか。
0126デフォルトの名無しさん
2011/06/11(土) 22:52:39.73もしかするともっと複雑な再帰とかだとスタック見たいこともあるかも。
というかまあ見れる見れないだったら見れる方がありがたいのは確か。
ただ、再帰って、割とこうガチガチにロジカルに組まないとコンパイル通らない
ような気がしてて、スタック追っかけてまでデバッグする必要性あるかなあと
思ったりしたんだわ。
0127デフォルトの名無しさん
2011/06/15(水) 09:53:18.75C#使ってた時はVSのつと使ってたけどF#だと使いにくい?
0128デフォルトの名無しさん
2011/06/15(水) 22:17:38.41日本語?
母国語で頼む
0129デフォルトの名無しさん
2011/06/15(水) 22:59:09.060130デフォルトの名無しさん
2011/06/15(水) 23:15:40.400131デフォルトの名無しさん
2011/06/16(木) 12:49:59.57ウィンドウ→新規で別ウィンドウ出すとそのソースからでもできるんだけどいまいち発生する条件がわからん。
0132デフォルトの名無しさん
2011/06/16(木) 18:49:46.13http://research.microsoft.com/apps/video/dl.aspx?id=150053&l=i
0133デフォルトの名無しさん
2011/06/18(土) 10:35:56.55F#いいね。
http://ideone.com/IokO4
0134デフォルトの名無しさん
2011/06/24(金) 12:20:41.31Barrier使うぞ
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?から、だれか移ったのかな?
0135デフォルトの名無しさん
2011/06/27(月) 02:39:51.37for内でbreakしたりしたいんですがどうやればよいですか?
0136デフォルトの名無しさん
2011/06/29(水) 11:16:04.97自分の場合はtryFindかtryPickかな。
どうしても途中で抜けたいなら、例外出して抜けるしかない。
自分もC++のコードをF#にしてみようと思ったときそこで悩みました。
結局、F#の繰り返しのfor文は全然使わないでList.mapかList.iterで処理するのがいいと思った。
0137デフォルトの名無しさん
2011/07/01(金) 11:25:54.20>関数内で途中でreturn みたいに値を返したり
条件で返す値を変える
>for内でbreakしたりしたいんですがどうやればよいですか?
手続き型のfor/whileは全て再帰だと思っていい
0138デフォルトの名無しさん
2011/07/02(土) 00:42:03.470140天使 ◆uL5esZLBSE
2011/07/05(火) 06:48:35.87ここで、Ruby以外を選ぶ奴ってマジでなんなんだろうな
ゴミだし
0141天使 ◆uL5esZLBSE
2011/07/05(火) 13:47:18.60そんな言語使ってる奴ってどうみてもゴミだと思うんだけど
もしかして「;」これ打ち忘れてコンパイルエラー出すのが楽しいの?
そうか、二度と話かけんなよ
ゴミの分際でw
0142デフォルトの名無しさん
2011/07/10(日) 11:33:45.100143デフォルトの名無しさん
2011/07/12(火) 18:22:39.87http://users.softlab.ece.ntua.gr/~ttsiod/score4.html
0144デフォルトの名無しさん
2011/07/17(日) 00:05:23.572.0のソースはあるんだけど検索してもわからんです…
0145デフォルトの名無しさん
2011/07/17(日) 10:04:55.63コード見ようや・・・
http://d.hatena.ne.jp/einblicker/20110712/1310476340
0146デフォルトの名無しさん
2011/08/07(日) 02:29:54.25http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
msdnでドキュメント公開してるのも大きいんだろうな
0147デフォルトの名無しさん
2011/08/20(土) 02:34:49.66って言う人には
http://www.slideshare.net/bleistift/cvbf
これを見るといいかもね?
0148デフォルトの名無しさん
2011/08/20(土) 02:38:41.36勉強になるかもね?
http://d.hatena.ne.jp/bleis-tift/20110803/1312345593
0149デフォルトの名無しさん
2011/08/20(土) 06:04:16.54なってないなぁ…と思う。
そんなもん見るよりも、ちゃんと時間取って実践F#読む方がずっといいよ。
0150デフォルトの名無しさん
2011/08/20(土) 10:46:16.38なってないなぁ…と思う。
そんなもん見るよりも、ちゃんと時間取ってExpert F# 2.0読む方がずっといいよ。
0151デフォルトの名無しさん
2011/08/20(土) 11:46:15.040152デフォルトの名無しさん
2011/08/20(土) 21:29:33.050153149
2011/08/21(日) 08:02:31.09突っ込むために見直してみたら、そんなに突っ込み所は無かったかも。
>>149で頭ごなしに否定するのはまずかった。反省してる。
初見ではもっと気になる所があった気がしたけど、今見て思うのは以下。
・P35-P43 if式を(.NET中では)F#に特徴的、みたく書いてるけど、実はVB.NETにもif式はあるのです…
・P85 高性能、ではなくて、高機能、では?
・タプルを使ったPythonでいうアンパック代入相当の構文を備えていて、
多値関数の戻り値が(x,y) = funcHoge(a,b)みたいに自然に書ける説明が抜けてる。
・リスト操作用の組み込み高階関数の説明が無い。
とか。重箱の隅かもしれんけど、気になるんよ。
0154関数型入門中
2011/08/21(日) 19:29:53.73ここ数ヶ月、関数型言語をいろいろ見ています。(Scala,Haskellなど)
実践F#という本を読んでいます。
ちょっとこういう場合どうすればいいか、わからないことがあり質問させてください。
あるレコードが定義されている場合、
そのレコードに対して適用できる一連の関数を知る方法ってありますか?
実践F#には、同じ名前空間に、レコードと同じ名前のモジュールを定義して、
そこに関連する関数を書くとよい、とされていますが、
実際そうされているものでしょうか。
一つに、Haskellの型クラスのような仕組みがあれば、見通しがよくなると思うんですが
そういう仕組みはないんですよね? (Scalaにもなかった。。)
なにか、自分で設計する場合、他人が見てもわかりやすい方法などあれば教えてください。
よろしくお願いします。
0155デフォルトの名無しさん
2011/08/21(日) 20:41:30.810156デフォルトの名無しさん
2011/08/21(日) 21:20:09.09ある型に対する一連の関数を知る方法は、簡単にはないですね。
AppDomainをリフレクションで総舐めとかすればそりゃ別ですが。
型と同名のモジュールを作ってーというお作法は、まあ、ふつうはそうするかなあと。
もちろん、ふつうじゃない場合もあるわけだけど。
Haskell型クラスが美人なのはわかりますが、すでにインターフェイスで筋通してる
.NET(あるいはJVM)においてそれを求めるのは、ちょっと難しいかなあという感想。
>>155
関数型でなくOOPで、と。ええ、おっしゃる意味は解りますが、といって、たとえば
Fooオブジェクトを必要とする振る舞いがすべてFooのメソッドとして定義されるとは
限らないわけで。BarクラスのメソッドがFooを引数に取ることだってあるでしょう。
このあたり、私は、F#においてのみ特別不便だ、とは感じません。
0157b
2011/08/21(日) 22:37:39.67書いた人です。指摘してくれてありがとうございます!
>・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には一対一で対応するものが無いような高階関数の紹介はやってもよかったかもしれません。
0158b
2011/08/21(日) 22:39:15.220159デフォルトの名無しさん
2011/08/24(水) 01:30:04.05素敵!
0160デフォルトの名無しさん
2011/09/07(水) 22:14:16.340161デフォルトの名無しさん
2011/09/07(水) 22:14:49.330162デフォルトの名無しさん
2011/09/07(水) 22:33:14.580163デフォルトの名無しさん
2011/09/07(水) 22:45:31.06というとアレだが、F# に特化してる人っているかね?
なにかしらほかの言語も使いつつ F# も嗜む的な
リベラルというか
0164デフォルトの名無しさん
2011/09/07(水) 23:40:27.20F#も出来る人多いんじゃないの?
0165デフォルトの名無しさん
2011/09/08(木) 05:49:53.02小物やらバッチに使うやらぐらいなら、そりゃあるだろうけれど。
かといってF#で何かOSSで作って公開、などという人もいないようだし。
0166デフォルトの名無しさん
2011/09/08(木) 08:49:22.56え?
ttp://d.hatena.ne.jp/taedium/20110604/p1
0167デフォルトの名無しさん
2011/09/08(木) 12:11:17.65GUIアプリクライアントをF#で開発して納品した話をしてたよ。
0168デフォルトの名無しさん
2011/09/08(木) 15:48:51.11最終的には.netのグルー言語以外の何でもねえんだし
scalaにしろ、元にくらべての使い勝手の話になるんだから面白い話じゃない
.net嫌いな人ってもういないの?
>>160>>161
それなら各言語のすごい人全部まとめれ
0169デフォルトの名無しさん
2011/09/08(木) 23:16:33.81msdn magazine Sep. 2011
http://msdn.microsoft.com/ja-jp/magazine/hh394149(en-us).aspx
0170デフォルトの名無しさん
2011/09/09(金) 19:54:27.44#なんか付けたところで同じようなもんだろ。
0171デフォルトの名無しさん
2011/09/09(金) 20:01:08.56なんてC#の変態の人たちはF#やんないの?
0172デフォルトの名無しさん
2011/09/09(金) 20:21:30.63F#のほうが使いやすいけどねー
0173デフォルトの名無しさん
2011/09/09(金) 20:32:09.20C#にはラムダ式、まともなジェネリック、LINQがあるし、
次のバージョンではasync,awaitも入るのでF#のメリットが相対的に少ない。
また、F#はC#と比べてIDEの支援が弱いのというデメリットがあるので
(特に WindowsForms、WPF、ASP.NET MVCなど主要ライブラリ関連)
F#のメリットとデメリットを天秤にかけた結果、C#でいいやって事になってしまう。
0174デフォルトの名無しさん
2011/09/09(金) 20:34:00.210175デフォルトの名無しさん
2011/09/09(金) 20:40:54.41って場面は割とよくあるんだけど、
それだけの為にユーザーの環境にF#ランタイムを入れさせるのは憚られたので
結局使ってない。
.NET FrameworkにF#ランタイムが含まれてたら使ってたかもな。
0176デフォルトの名無しさん
2011/09/09(金) 20:44:40.990177デフォルトの名無しさん
2011/09/09(金) 21:42:20.97インテリセンスさいこーってことでしょ
まー.NET的にC#が勝ち馬であるとに異論はない
いまんとこ
>>173
Javaも別に糞じゃないと思うが
古臭いならわかる
0178デフォルトの名無しさん
2011/09/09(金) 22:58:15.350179sage
2011/09/09(金) 23:36:12.150180デフォルトの名無しさん
2011/09/09(金) 23:46:26.260181デフォルトの名無しさん
2011/09/10(土) 00:09:06.90http://slideshare.net/osiire/3-8660480
0182デフォルトの名無しさん
2011/09/10(土) 00:09:37.070183デフォルトの名無しさん
2011/09/10(土) 07:03:34.560184デフォルトの名無しさん
2011/09/10(土) 13:36:11.110185デフォルトの名無しさん
2011/09/10(土) 14:18:54.64リストくれ
0186デフォルトの名無しさん
2011/09/10(土) 16:20:27.900187デフォルトの名無しさん
2011/09/13(火) 21:07:32.69ボス?ドンサイム?
0188デフォルトの名無しさん
2011/09/15(木) 23:23:01.45http://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サポート増えるみたい。
0189デフォルトの名無しさん
2011/09/16(金) 09:23:30.600190デフォルトの名無しさん
2011/09/16(金) 11:56:24.120191デフォルトの名無しさん
2011/09/16(金) 13:05:24.76仕事で両方使ってる人は、期待することはあっても文句はいわんだろ。
P層C#、F層F#でそれなりの規模のもの作ってみると、結構使える手ごたえはある。
普通にF#で機能を一つ作った後、その中で理論的に並列動作できそうなところがあれば、
それをマルチスレッド化するのに数分の作業で済むことも多いし、それがいつも安定して動く
という経験を重ねると、これからの時代C#だけじゃだめかなという気にもなってくる。
まだ立ち上がって数年の言語だし、捨てられないでちゃんとバージョンアップしてくれてるから、
まだまだこれからと見るべきでしょう。
0192デフォルトの名無しさん
2011/09/16(金) 17:08:03.300193デフォルトの名無しさん
2011/09/16(金) 17:10:27.450194デフォルトの名無しさん
2011/09/16(金) 17:31:00.24ありがとうございます
型定義を手で書かなくても済むようにするための
メタプログラミングの仕組み、みたいな感じでしょうか。。。
0195デフォルトの名無しさん
2011/09/17(土) 00:34:37.50http://msdn.microsoft.com/en-us/library/hh370982(v=VS.110).aspx
msdn Libraryのなかに、VS11のドキュメントがもう揃ってるんかー
0196デフォルトの名無しさん
2011/09/17(土) 04:22:38.42http://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#も使えそう。
0197775
2011/09/17(土) 09:34:30.73build会場周辺でちょっと合って話さんかとかやってる。
0198デフォルトの名無しさん
2011/09/18(日) 07:06:06.41http://www.slideshare.net/igeta/fsharp-langupd-fpm2011
0199デフォルトの名無しさん
2011/09/18(日) 09:43:03.310200デフォルトの名無しさん
2011/09/18(日) 14:25:45.62ビルドプロセスをフックして型を作ってるんじゃないかな。
そっちも .NET (F# 含む)で書ける。
0201デフォルトの名無しさん
2011/09/20(火) 10:58:50.53どちらも日本語で表示しようとして文字化けしてる。(その画面だけ多国語対応してない?)
「C:\Program Files (x86)\Microsoft SDKs\F#\3.0\Framework\v4.0\Fsi.exe」を直接起動すると
win7(ja)で日本語、Win8(en)英語で正常に表示された。
0202デフォルトの名無しさん
2011/09/20(火) 13:06:00.07さすがにリリース前あたりには、用意されるとおもうが、、
とりあえずWP7と同じようにギャラリーに来るのかな
http://blogs.msdn.com/b/dsyme/archive/2010/08/20/f-windows-phone-7-silverlight-templates-now-on-visual-studio-gallery.aspx
0203デフォルトの名無しさん
2011/09/23(金) 17:42:48.27いまだに手応えとか、いつまでそんなこと言ってんだよ
一生前衛みたいな感じかw
0204デフォルトの名無しさん
2011/09/27(火) 04:47:47.07判別供用体(代数的データ型)の、パターンマッチについて教えてください。
Scalaでは、case class で定義すると、内部的には、class 定義に、applyやunapplyメソッドを持たせて、オブジェクトに対してパターンマッチを行っているようです。
F#の場合は、どんな感じでしょうか? F#の判別供用体も、実際はクラスから作られたオブジェクトなんですよね?? (.Net言語だから、そう考えたんですが。。)
そうすると、Scalaのapplyやunapplyに対応するメソッドを持ったクラスなんでしょうか?
教えてください、よろしくお願いします。
0205デフォルトの名無しさん
2011/09/27(火) 05:03:40.46各々Tagを持ってるのでパターンマッチはそのTagを見てると思う。
0206デフォルトの名無しさん
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を返すのでなく、元のクラスが何か? を得る関数という意味です。)
0207デフォルトの名無しさん
2011/09/27(火) 13:01:19.65Reflection使ってbaseクラスたどってみては。
C#から見ると多分Aとして見れると思う。
0208デフォルトの名無しさん
2011/09/27(火) 13:14:29.26type A = | B
hoge.GetType().Name
;;
でAって出てきた
0209デフォルトの名無しさん
2011/09/27(火) 13:20:04.19| B
| C of int
let hoge = C 10
hoge.GetType().Name
;;
はCだった
0210206
2011/09/28(水) 14:57:18.94自分なりの理解はこんな感じになりました (↓素人理解です)
F#のレベルでは、
判別共用体と、クラス・オブジェクト は全く別のもの。
CLRレベル(.Netレベル)ではたぶん、同じような仕組みで実装されている。
一方、
Scalaは、いわゆる判別共用体は、クラスの拡張で実現されているように思います。
(applyやunapplyというものを定義したもの)
※ 素人の理解ですが。
0211デフォルトの名無しさん
2011/09/28(水) 15:07:34.34ProgramingF#のC#Interropの章にF#で定義したunionがC#だとどういうクラスとして定義されるか出てるから見てみるがヨロシ。
webでもどっか転がってそうだけど。
0212デフォルトの名無しさん
2011/09/30(金) 22:37:54.99OOPの章のP264に、
本書では、詳細に踏み込みませんが、レコードや判別共用体の定義とは、F#コンパイラが構造的な性質
を持つように特別なパターンを適用したクラスとして生成するものです。本節では、特別なパターンが施されな
い、生身のクラスを定義する方法を示します(リスト8‐5)。
と書いてあって、F#ではクラスの特別なものが、判別共用体や、レコードのようなきがする。
0213デフォルトの名無しさん
2011/10/01(土) 06:37:51.43MSIL上は継承関係とか種類を表すタグとかが一定ルールに従っているただのクラスであり、其れが自動生成されているだけ。
0214デフォルトの名無しさん
2011/10/12(水) 10:06:47.5146位か…… なんかえらい順位下げちゃったね。何でだろう。
0215デフォルトの名無しさん
2011/10/12(水) 14:56:32.450216デフォルトの名無しさん
2011/10/12(水) 18:43:17.120217デフォルトの名無しさん
2011/10/22(土) 20:48:19.240218デフォルトの名無しさん
2011/10/23(日) 03:15:14.94はやくJavaの時代終わらないかなぁ・・・・
0219デフォルトの名無しさん
2011/10/23(日) 12:42:45.14scalaは関数脳に慣れてない人からは関数型言語部分に苦しんで、haskellやOCamlで関数脳になった人からは関数型言語としてはキモイから。。。
F#Express出たらかなり差が付くだろうね
haskellもGUIに特化した専門書とか出ないと伸びないんだろうな。。。
0220デフォルトの名無しさん
2011/10/23(日) 14:20:16.52haskell でguiな本書こうか?
0221デフォルトの名無しさん
2011/10/23(日) 14:21:36.40ぜひ!!
0222デフォルトの名無しさん
2011/10/23(日) 14:52:33.37gtk2hs でもいいっすか?
haskell-qtはまだ使ったことないんです、、、
0223デフォルトの名無しさん
2011/10/23(日) 15:04:38.88自分もgtk2hsの勉強始めたばかりなんで、渡りに船です
0224デフォルトの名無しさん
2011/10/23(日) 19:13:01.51とりあえず開始するかもしれないです。
でも期待はしないでください、、、、
0225デフォルトの名無しさん
2011/10/23(日) 20:00:06.22うい
0226デフォルトの名無しさん
2011/10/23(日) 20:32:16.830227デフォルトの名無しさん
2011/10/26(水) 23:09:18.460228デフォルトの名無しさん
2011/10/27(木) 09:05:20.27全く売れないのも面白いのでwwww
0229デフォルトの名無しさん
2011/11/09(水) 16:59:13.93書いて
0230デフォルトの名無しさん
2011/11/09(水) 17:17:18.280231デフォルトの名無しさん
2011/11/09(水) 19:01:13.540232デフォルトの名無しさん
2011/11/09(水) 19:04:24.86同人誌レベルなら、、
買います
0234デフォルトの名無しさん
2011/11/11(金) 04:23:18.13SOEより凄いなら買う
0235デフォルトの名無しさん
2011/11/11(金) 13:59:41.00githubに、fsharpオープンソースコミュニティーというのがあるのか。
donsymeがいると公式感があるな。
mono開発者のicazaも入ってる。
F#はClojureCLRと違って余裕あるからか、monoとの互換性も重視してたの思い出した。
0236デフォルトの名無しさん
2011/11/11(金) 14:04:43.63最近FPではやりのIteratee使った関数型っぽいIO作り始めたよという記事?
future-io
https://github.com/fractureio/fracture
fsharpxってのがあるのか。
scalazとはまた違う?
https://github.com/fsharp/fsharpx
0237デフォルトの名無しさん
2011/11/11(金) 14:18:47.50Fracture/Pipelet/Frackって分かれてる。
future-ioはSSDだった・・・orz
0238デフォルトの名無しさん
2011/11/14(月) 01:37:08.300239デフォルトの名無しさん
2011/11/14(月) 01:51:46.030240デフォルトの名無しさん
2011/11/14(月) 01:54:35.630241デフォルトの名無しさん
2011/11/14(月) 02:54:08.28.netの型システムとの互換性を重視して入れなかったとどっかで言ってたから
H#はないんじゃないの?
ちなみに"Visual Haskell"は既にあるよ
0242デフォルトの名無しさん
2011/11/14(月) 06:45:33.31>ちなみに"Visual Haskell"は既にあるよ
そうだった。VS2010に対応したかな?少しは安定したかな?
全然使えなさそうですっかり忘れてた
>F#はType Classの要望が強かったけど
>.netの型システムとの互換性を重視して入れなかったとどっかで言ってたから
・・・orz
0243デフォルトの名無しさん
2011/11/14(月) 09:38:24.830244デフォルトの名無しさん
2011/11/14(月) 13:06:42.36多層的で等価比較、順序比較出来るリストを簡単に定義出来たりする
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
0245デフォルトの名無しさん
2011/11/14(月) 15:21:15.27large xs ys | xs < ys = (ys,xs)
large xs ys = (xs,ys)
0246デフォルトの名無しさん
2011/11/14(月) 19:28:12.45できないんですがどっかにまとまってないでしょうか?
あと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
となるような
0247246
2011/11/14(月) 20:27:08.67http://beyondrelational.com/blogs/niladribiswas/archive/2011/08/09/how-to-call-a-f-dll-from-c.aspx
0248デフォルトの名無しさん
2011/11/14(月) 20:53:17.110249デフォルトの名無しさん
2011/11/17(木) 21:05:56.68ねーよ
0250デフォルトの名無しさん
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
0251デフォルトの名無しさん
2011/11/18(金) 21:39:55.750252デフォルトの名無しさん
2011/11/19(土) 01:58:24.47exec(1.fs); //this is c# code
0253デフォルトの名無しさん
2011/11/19(土) 23:55:32.570254デフォルトの名無しさん
2011/11/20(日) 19:04:44.860255デフォルトの名無しさん
2011/11/24(木) 21:32:53.28ttp://cs.hubfs.net/topic/None/57413
↑は見たんだが、02-SerializeXml.zip はダウンロードできないみたい
0256デフォルトの名無しさん
2011/12/10(土) 12:47:04.33F#でぷよぷよだって。コード全然読めん
■ このスレッドは過去ログ倉庫に格納されています