【.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-
0153149
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
■ このスレッドは過去ログ倉庫に格納されています