【.NET】F#について語れ【OCAML】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2007/08/02(木) 14:03:05OCAMLの流れを汲むこの言語、いろいろと面白そうなことができそう。
まだまだ英語の情報しかないこの言語について、幅広く語れ。
http://research.microsoft.com/fsharp/fsharp.aspx
0002デフォルトの名無しさん
2007/08/02(木) 14:06:090003デフォルトの名無しさん
2007/08/02(木) 14:08:03需要無いんかね
0004デフォルトの名無しさん
2007/08/02(木) 14:14:430005デフォルトの名無しさん
2007/08/02(木) 14:22:09>Windows Live プログラミング
5 :デフォルトの名無しさん:2007/05/23(水) 03:51:43
くだらねえ。なんでタダでMSの奴隷にならなあかんの。
7 :デフォルトの名無しさん:2007/06/15(金) 08:37:17
漏れのW-zero3に
LIVEのサービスにシンクロするのを入れたけど
接続しっぱなし、常に電源オンで
頭にきて速攻消した。
OFFICEは付き合いで買ってみたけど
VSはもう川根。
8 :デフォルトの名無しさん:2007/06/15(金) 23:14:07
>>5
Webサービスの類は自前でサーバを作らない限りどこかの会社の奴隷じゃよ
9 :デフォルトの名無しさん:2007/06/16(土) 13:29:16
だからLAMPで組むところが多い
0006デフォルトの名無しさん
2007/08/02(木) 14:34:030007デフォルトの名無しさん
2007/08/02(木) 14:35:340008デフォルトの名無しさん
2007/08/02(木) 14:40:07他の関数言語スレも過疎ってるし、単独スレはきついだろうな。
0009デフォルトの名無しさん
2007/08/02(木) 14:46:430010デフォルトの名無しさん
2007/08/02(木) 14:48:04\ __ /
_ (m) _ピコーン
|ミ|
/ .`´ \
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(・∀・∩< C丼以外の#言語を語れ
(つ 丿 \_________
⊂_ ノ
(_)
0011デフォルトの名無しさん
2007/08/02(木) 14:48:10G# H# I# ってどんな言語?
0012デフォルトの名無しさん
2007/08/02(木) 14:50:41目立言語
0013デフォルトの名無しさん
2007/08/02(木) 14:59:59そのうちMSはA#からZ#まで26種類の駄言語を作りかねんな
0014デフォルトの名無しさん
2007/08/02(木) 15:01:470015デフォルトの名無しさん
2007/08/02(木) 15:03:32ところでやっぱりドトネト専用言語?
0016デフォルトの名無しさん
2007/08/02(木) 15:05:10昔、そういう1文字言語のリストをどっかで見た覚えが・・・
0017デフォルトの名無しさん
2007/08/02(木) 15:26:190018デフォルトの名無しさん
2007/08/02(木) 15:39:42誰か三行で説明してくれ
0019デフォルトの名無しさん
2007/08/02(木) 15:40:34http://pc8.2ch.net/test/read.cgi/tech/1054523453/
0020デフォルトの名無しさん
2007/08/02(木) 16:02:160021デフォルトの名無しさん
2007/08/02(木) 16:15:05ttp://pc11.2ch.net/test/read.cgi/tech/1111656698/l50
0022名無しさん♯
2007/08/02(木) 18:16:21#light
type State<'s, 'a> = ST of ('s -> ('a * 's))
with
static member Run (ST x) = x
static member Get () = ST <| fun s -> (s, s)
static member Put s = ST <| fun _ -> ((), s)
static member Eval x = State.Run x >> fst
static member Exec x = State.Run x >> snd
type StateBuilder () =
member b.Return a = ST <| fun s -> (a, s)
member b.Bind (ST x, f) = ST <| fun s -> let (a, s') = x s in State.Run (f a) s'
member b.Let (x, f) = f x
let state = StateBuilder ()
let _ =
state
{ let x = 100
let! s = State.Get ()
do! State.Put (x + s)
return () }
|> State.Exec <| 1000
|> (print_any >> print_newline)
(実行結果)
1100
0023デフォルトの名無しさん
2007/08/02(木) 22:52:49これどうやればいいのかわからない。誰かヒント下さい。
リフレクションつーことは
http://research.microsoft.com/fsharp/manual/fslib/Microsoft.FSharp.Reflection.html
これを使うんだろうけど・・・正直さっぱりわからん。
ていうか、俺能力無さ杉。
>>22
おお!!使う機会あったら使わせてもらいます。
0024デフォルトの名無しさん
2007/08/02(木) 23:05:420025デフォルトの名無しさん
2007/08/02(木) 23:21:28うーん。そういうのあんましよくわからないんだわ。
でもがんばってみる。ありがとう!
0026デフォルトの名無しさん
2007/08/03(金) 01:03:23_main()が帰ってくる。
bar(), baz()っていう関数名を返すにはどうすればいいんでしょうか。
#light
open System.Diagnostics
let foo() =
let stck = new StackTrace()
let frme = stck.GetFrame 1
let mthd = frme.GetMethod()
mthd.Name
let bar() = foo()
let baz() = foo()
0027デフォルトの名無しさん
2007/08/03(金) 01:13:530028デフォルトの名無しさん
2007/08/03(金) 02:11:10インデックスってどのインデックス?(GetMethod ?のところ?)
というか、やっぱりStackTraceよくわからない。
0029デフォルトの名無しさん
2007/08/04(土) 16:16:580030デフォルトの名無しさん
2007/08/05(日) 04:22:220031デフォルトの名無しさん
2007/08/05(日) 05:20:290032デフォルトの名無しさん
2007/08/05(日) 11:30:390033デフォルトの名無しさん
2007/08/05(日) 19:12:51>>30
違います。弄って見れば分るけどFortranとは別物
0034デフォルトの名無しさん
2007/08/05(日) 19:39:100035デフォルトの名無しさん
2007/08/05(日) 21:48:010036名無しさん♯
2007/08/06(月) 08:16:02#light
open Seq
type SeqBuilder () =
member b.Return a = singleton a
member b.Bind (m, k) = map_concat k m
member b.Let (x, f) = f x
let seq = SeqBuilder ()
let guard = function
| true -> singleton ()
| _ -> empty
let _ =
seq { let! x = {1..10} (* from *)
do! guard (x > 5) (* where *)
return (x * x) } (* select *)
|> iter (string_of_int >> print_endline)
(実行結果)
36
49
64
81
100
0037デフォルトの名無しさん
2007/08/06(月) 10:02:31完全に記法の問題だけど、seqの後の{ }がやっぱキモい
0038デフォルトの名無しさん
2007/08/06(月) 10:16:250039デフォルトの名無しさん
2007/08/06(月) 14:15:140040デフォルトの名無しさん
2007/08/06(月) 14:30:57でかいアプリ作ったときの安定性がどうだか気になるけれど、使いこなせばC#よりはるかにGenericプログラミングできて生産性があがりそう。
VSでの使いかってもまぁまぁだし。
0041デフォルトの名無しさん
2007/08/06(月) 14:37:2340の意見って何てアストロターフィング?
0042デフォルトの名無しさん
2007/08/06(月) 14:51:560043デフォルトの名無しさん
2007/08/06(月) 17:11:390044デフォルトの名無しさん
2007/08/06(月) 19:04:220045デフォルトの名無しさん
2007/08/06(月) 19:25:23ttp://haskell.g.hatena.ne.jp/nobsun/20060907/monadicIO
ttp://haskell.g.hatena.ne.jp/nobsun/20060908/monadicIO
実は>>22のState Monadほとんどそのままだったりする。
0046デフォルトの名無しさん
2007/08/06(月) 19:55:21実装じゃなくて「入出力する」ということはどういう感じにしたら
モナドになるんだ?って話。
>>実は>>22のState Monadほとんどそのままだったりする。
実は別にState Monad使わなくても作れたりするらしい。
もともと抽象的な実装方法というものがあってそれを満たすものがあれば
なんでもいい。(一番自然なのはStateMonad使う方法になるんだろうけど)
0047デフォルトの名無しさん
2007/08/06(月) 19:58:31つまりその実装で一体何を作ったのか?ってこと
(副作用出ないが云々は抜きで)
0048デフォルトの名無しさん
2007/08/07(火) 16:12:03買ってみようかどうか迷ってるのだが。
0049デフォルトの名無しさん
2007/08/09(木) 15:28:450050デフォルトの名無しさん
2007/08/09(木) 16:15:36ttp://oandrieu.nerim.net/ocaml/
ここにあるものってF#で使えますかね??特にGsl。
0051・∀・)っ-○◎●
2007/08/10(金) 02:03:120052デフォルトの名無しさん
2007/08/10(金) 08:36:230053デフォルトの名無しさん
2007/08/16(木) 08:27:500054デフォルトの名無しさん
2007/08/16(木) 11:06:150055デフォルトの名無しさん
2007/08/16(木) 14:00:580056デフォルトの名無しさん
2007/08/16(木) 21:35:200057デフォルトの名無しさん
2007/08/17(金) 12:07:050058デフォルトの名無しさん
2007/08/17(金) 21:33:53Scheme >>> OCaml > Haskell
ぐらいかと思っていたけど
実は
Scheme >>> Haskell >> Ocaml
なんじゃまいか
0059デフォルトの名無しさん
2007/08/17(金) 21:37:23OCaml >>>>>> F#
なのでOCamlユーザの絶対数が少ないのならF#使いの数は・・・。
0060デフォルトの名無しさん
2007/08/18(土) 01:51:410061デフォルトの名無しさん
2007/08/18(土) 15:02:24Schemeをネタに優越感に浸ってる香具師はよく見かけるが
そういう香具師が仕事で使ってるのはJavaだったりするし
小物ツールはRubyで書いてたりするのがほとんどな希ガス
0062デフォルトの名無しさん
2007/08/20(月) 09:12:36探しても無いからこれはMatlabあたりと連携させる必要があるのかなぁ。
0063デフォルトの名無しさん
2007/09/01(土) 13:43:370064デフォルトの名無しさん
2007/09/02(日) 14:01:500065デフォルトの名無しさん
2007/09/02(日) 17:35:21FLinqサンプルが、May 2006 CTPじゃなくて.NET 3.5 Beta2(以降)に対応しないかってこと?
まあ、FLinqはあくまで標準ライブラリじゃなくてサンプルだから、対応の優先度は低いと思う・・・。
0066デフォルトの名無しさん
2007/09/02(日) 17:46:24自己責任だとしても製品に使っていいものかどうか。
0067デフォルトの名無しさん
2007/09/03(月) 23:14:51LINQ自体(.NET 3.5)はまだベータで、RTMは年末頃だけどそういう話?
0068デフォルトの名無しさん
2007/09/04(火) 01:15:250069デフォルトの名無しさん
2007/09/04(火) 14:38:45それともHaskelとかと比べて注意しないといけないとこあり?
0070デフォルトの名無しさん
2007/09/28(金) 00:02:200071デフォルトの名無しさん
2007/10/05(金) 07:06:18酔狂で関数言語(関数型言語?)をいじってみようと思うんだけど、
ocaml と haskell とどちらがお勧め?
手続きがたべったりの俺には無理?
0072デフォルトの名無しさん
2007/10/05(金) 08:37:50007371
2007/10/05(金) 09:24:00Visual Haskell も入れてみたけど、とっつきにくかった。
http://www.haskell.org/visualhaskell/
そういやなんでも IL 上でつくられてね?
IronPython とか IronRuby とか。
0074デフォルトの名無しさん
2007/10/05(金) 09:30:500075デフォルトの名無しさん
2007/10/05(金) 09:32:03ttp://pc11.2ch.net/test/read.cgi/prog/1189919634/196
いまのオープンソースの流れから考えてもC#は数年後には今のJ#と同じ道を辿る。
利潤追求の激しい企業が本来ならば仲間にしなければならない開発者までも食い物に
していることも分からず、M$マンセーしている奴は頭を齧られ過ぎて考えることも出来ない
くらいに脳みそがなくなっているんだろ。可哀想だよ。
0076デフォルトの名無しさん
2007/10/05(金) 09:52:10はじめはOCamlで、慣れてきたらHaskellもやってみるのがよろしいかと。
OCamlだけだと遅延評価とか関数合成あたりが学びづらいし、
Haskellだけだと再帰とかモジュールシステムあたりが学びづらい。
0077デフォルトの名無しさん
2007/10/05(金) 10:01:19(^o^)ノ オワタ 三┌(^o^)┘オワタ /|
ノ( ヘヘ 三 ┘> 三 ┌(^o^)┘オワタ | ミ
(^o^)ノ オワタ 三 ┌(^o^)┘オワタ ┘>/ | ミ \( ^o^)/ オワタ
ノ( ヘヘ (^o^)ノ オワタ 三 ┘> ┌(^o^)┘オワタ / ミ |_/
ノ( ヘヘ 三 ┘> / / | ノ ノ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| / | ミ
| / | ヽ(^o^ )ノ オワター ミ \( ^o^)/ オワタ
_____________________|/ | \(\ノ ミ |_/
| | ミ ノ ノ
| | ミ \( ^o^)/ オワタ
______ ______ | | |_/
||// .|| ||// || │ | ノ ノ
||/ .|| ||/ || │ |
|| || ||._____________ ...|| │ | ミ
|| || ||| (^o^) | || │ | ミ\(^o^)/ オワタ
 ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ | | ┘|
0078デフォルトの名無しさん
2007/10/05(金) 10:02:50ttp://wiredvision.jp/news/200709/2007090520.html
0079デフォルトの名無しさん
2007/10/05(金) 10:31:330080デフォルトの名無しさん
2007/10/05(金) 10:57:46ttp://pc11.2ch.net/test/read.cgi/tech/1179314479/l50
008171
2007/10/05(金) 12:58:50C# はどうなるかわかんないけど、
C++/CLI の出来はいいと思うよ。
Managed C++ でいろいろと改良点が指摘されて
それが十分に生かされていると思う。
0082デフォルトの名無しさん
2007/10/05(金) 13:01:430083デフォルトの名無しさん
2007/10/05(金) 17:17:39System.Windows.Forms とか見えてる・・・
もしかして俺が C# で書いたフォームを
Haskell から呼び出したりできるのか??
0084デフォルトの名無しさん
2007/10/05(金) 17:18:14両方並行していじってると頭がおかしくなるみたい。
0085デフォルトの名無しさん
2007/10/05(金) 18:05:320086デフォルトの名無しさん
2007/10/05(金) 20:09:58OCamlよりも速いお
立ち上がってからの話だけど・・・
ちょっと言ってみたかっただけだお
0087デフォルトの名無しさん
2007/10/05(金) 20:52:17ttp://www.strangelights.com/blog/archive/2007/06/17/1588.aspx
0088デフォルトの名無しさん
2007/10/05(金) 23:21:11C#って速いか?
C#って速いか?
C#って速いか?
C#って速いか?
0089デフォルトの名無しさん
2007/10/05(金) 23:29:390090デフォルトの名無しさん
2007/10/06(土) 01:02:090091デフォルトの名無しさん
2007/10/06(土) 07:23:48速いと思うよ。 >>90 が言うように初回起動時に
JITコンパイラのようなものが働いているみたいで、
確かにデバッグ・実行繰り返しているときに
いらいらすることがある。デバッグコードだから
かもしれないけど。
あと、実際に多用するかどうかはともかくとして、
C#だとどうしても速く書けない部分があっても
DLLの呼び出しが簡単なので、Cやアセンブラで
書いたコードを呼び出せるし。Javaのネイティブ
メソッドよりも簡単に。
0092デフォルトの名無しさん
2007/10/06(土) 09:43:34interopでのDLLやCOMの呼び出しは確かに簡単だが、マーシャリングの
コストが高いので細切れにCの小さなコードを呼ぶような使い方はすべきでない。
そういうことがしたいなら、むしろC++/CLIを使うべきだろう。
0093デフォルトの名無しさん
2007/10/06(土) 11:46:01C#のP/InvokeとC++/CLIの暗黙のP/Invokeのマーシャリングにかかるコストは実は差がない。
違いはC++/CLIではデフォルトでSupressUnmanagedCodeSecurityAttributeが付加され、
C#は付かないということ。
C#のP/Invokeに[SupressUnmanagedCodeSecurity]をつけると途端に速くなるから試してみるといい。
0094デフォルトの名無しさん
2007/10/06(土) 17:26:280095デフォルトの名無しさん
2007/10/06(土) 17:43:08それってセキュリティ的にどうなの?
0096デフォルトの名無しさん
2007/10/06(土) 17:57:10この設定はセキュリティ関連のチェックを事前にできるように
するかどうかというだけの設定じゃなかったっけ?
ドトネトなプログラムは実行時にたとえば「ディスクへの書き込み
はしちゃだめだからね」なんていうセキュリティ上の制約を
つけて実行することができるようだけど、プログラムが全体として
その制約を満たしているかどうかを実行開始前にチェックできるように
するか、実行時に「おいおい、書いちゃダメだってば」って
例外を出すようにするかって違いじゃないの?
F#の話から外れて申し訳ないが。
0097デフォルトの名無しさん
2007/10/17(水) 01:14:32入れてみたよ〜。なんだか面白そうだ。
0098デフォルトの名無しさん
2007/10/18(木) 04:04:22ttp://blogs.msdn.com/dsyme/archive/2007/10/17/s-somasegar-on-taking-f-forward.aspx
うは、Luke HobanがF#チームに異動か。
まあOrcasでの仕事もほぼ終わったところだろうし、いいタイミングなのかも。
0100名無しさん♯
2007/10/18(木) 21:18:06これって、F#を製品化するって話なの?
表現が微妙でそう読み取れないんだけど、反響を見るとそういう扱いになってる・・・。(´・ω・`)
0101デフォルトの名無しさん
2007/10/19(金) 07:33:45Visual Studio で何でもありという感じだなぁ。
その一方で、 Visual Studio 2008 Beta 2 見ると
J# がなくなっている・・・
俺としては継続してほしかった。
さらにライセンス的に無理なんだろうけど
JDK 1.6 にも対応してほしかった。
いまは JDK 1.1.4 相当だから。
スレちがいでごめん。
0102デフォルトの名無しさん
2007/10/20(土) 05:01:18には F# は科学計算用途に適した言語であるといえる。
F# は、低級だが高速な数値計算言語 (Fortran など) と、
高級だが低速な言語 (Mathematica など) の両方の特徴をもつ。
って書いてあるんですけど、 F# によって matlab や R 言語で処理するような
事柄にむいていますか?向いているなら今から習得して修論に使おうと思って
いるんですけど...
0103102
2007/10/20(土) 05:13:28には、 F# は異なる言語に容易にアクセスすることができ、
LAPACK や FFTW などといったライブラリの利用が容易である。
と書いてありますが、これは、 C 言語など低級の言語のみならず、 matlab や
mathematica や R 言語などにもアクセスする事は可能なんでしょうか?
0104デフォルトの名無しさん
2007/10/20(土) 12:13:220105デフォルトの名無しさん
2007/10/20(土) 17:38:14ほかのはCからいけるならとりあえずラッパコード書けばいけんじゃね?
0106デフォルトの名無しさん
2007/10/20(土) 18:28:41なので C++/CLI でラッピングすればドトネトの世界から
アクセスできる。当然 F# からもアクセスできる。
でもあんまり F# 使う意味ないんじゃね?
俺にとっての F# を使う意義と言えば、
Visual Studio の中で仕事しているふりをしながら
現実逃避できるというところだろうか。
0107102
2007/10/21(日) 23:58:45確かに、そうなると F# 使う意味なくなりますね...
それはそうと、 >>102 の
F# は科学計算用途に適した言語であるといえる。
F# は、低級だが高速な数値計算言語 (Fortran など) と、
高級だが低速な言語 (Mathematica など) の両方の特徴をもつ。
っていう記述は本当なのですか?もし本当なら、院生にとっては
夢のような言語のような気がするんですけど...
0108デフォルトの名無しさん
2007/10/22(月) 01:29:32F#というよりベースになってるOCamlの特徴かな。
それなりの訓練は必要だが関数型言語はある種の科学技術計算に向いてる。
ただ、これを高級と呼ぶかどうかは知らんし、手続き型がいい場合もある。
関数型言語の多くは遅延評価で弱い型付けであるが、
OCamlは正確(遅延評価でないという意味)で、推論でしっかり型付けされるため、
コンパイルが可能でパフォーマンスがいい。
問題はまだ新しい言語でライブラリが充実してないところ。
0109デフォルトの名無しさん
2007/10/22(月) 10:41:59どっかのページに大学院生でOCaml使っていて、こんなに(・∀・)イイ!!言語なのになんでマイナーなんだろうとかいう記述があったぞ
>>108
F#なら.NETのライブラリが使えるお
0110デフォルトの名無しさん
2007/10/23(火) 21:05:480111デフォルトの名無しさん
2007/10/23(火) 23:34:50> OCamlは正確(遅延評価でないという意味)
正格だボケ
0112デフォルトの名無しさん
2007/10/24(水) 00:24:580113デフォルトの名無しさん
2007/10/24(水) 05:59:26この場合VS上でのF#プログラミングって使えるんですかね
0114デフォルトの名無しさん
2007/10/24(水) 07:45:50いまお金かけないとすると、VS2008のbetaですかね。
0115デフォルトの名無しさん
2007/10/24(水) 09:38:060116デフォルトの名無しさん
2007/10/24(水) 10:25:49let rec makeclr v n =
let pr n = printf "closure %d\n" n in
if n < 1 then v else (fun () -> pr(n)) :: (makeclr v (n - 1))
let makecl = makeclr [] ;;
let v = makecl 10 in
List.iter (fun x -> x()) v ;;
リストの後方に追加するスマートな方法があったら教えてください。
逆にしたら怒られた。
(makeclr v (n - 1)) :: (fun () -> pr(n))
0117デフォルトの名無しさん
2007/10/24(水) 13:42:183行目で if n < 1 then rev v が定石かと思われ。
(makeclr v (n - 1)) @ [fun () -> pr n] は効率の面でおすすめできない。(´・ω・`)
0118デフォルトの名無しさん
2007/10/24(水) 14:37:10ありがとう。最後にまとめて反転させたほうが早いわけですね。
末尾再帰になってなかったのでそうしたら反転の必要もなくなりました。
最初はforやwhileを使ってたのですがなんだかうまくないようです。
あまりforやwhileは使わないのでしょうか。配列専用の機能のように思えました。
let rec makeclr v n =
if n < 1 then v else makeclr ((fun () -> printf "closure %d\n" n) :: v) (n - 1)
let makecl = makeclr [] ;;
let v = makecl 10 in List.iter (fun x -> x()) v ;;
0119デフォルトの名無しさん
2007/10/24(水) 15:11:11ループとしてのfor, whileはほとんど使いません。(つーか、構文忘れてるし・・・。)
ただし、内包表記のforはよく使います。
let makeclr n =
[ for i in [1..n] ->
fun () -> printf "closure %d\n" i ]
でもまあ、最初のうちは再帰で解決する習慣を身につけるべきかと。(´・ω・`)
0120デフォルトの名無しさん
2007/10/24(水) 15:12:06C#より優れてるところ、劣ってるところはなんですか?
F#にできてC#にできないことってありますか?
0121デフォルトの名無しさん
2007/10/24(水) 16:04:01こういうforの使い方があるのか。おいしくいただきまます。
0122デフォルトの名無しさん
2007/10/24(水) 20:08:41簡単なコードで頭の体操するのが精いっぱい。
しかし使い慣れた Visual Studio で動くので
なんとなく使えてる気になるけど。
やっぱり理論的な基礎をしっかりとやってない
専門学校上がりのコーダーには扱えないのかね。
Emacs における Emacs Lisp のように、
既存のネイティブ or ドトネトなプログラムの
マクロ言語としておもしろい?とかオモタけど、
妄想だけにしときます。
0123デフォルトの名無しさん
2007/10/25(木) 01:28:33[1..10] |> List.map (fun n () -> printf "closure %d\n" n) |> List.iter ((|>) ())
0124デフォルトの名無しさん
2007/10/25(木) 01:30:320125デフォルトの名無しさん
2007/10/25(木) 01:55:17http://opentechpress.jp/developer/07/10/24/0310251.shtml
0126デフォルトの名無しさん
2007/10/25(木) 01:58:350127デフォルトの名無しさん
2007/10/25(木) 02:12:00let delay f = fun () -> f
let _ = [1..10] |> List.map (printf "closure %d\n" |> (delay >> flip)) |> List.iter ((|>) ())
0128デフォルトの名無しさん
2007/10/25(木) 04:27:16let _ =
List.iter ((|>) ()) << List.map (flip << delay <| printf "closure %d\n") <| [1..10]
0129デフォルトの名無しさん
2007/10/25(木) 08:26:450130デフォルトの名無しさん
2007/10/25(木) 09:46:240131デフォルトの名無しさん
2007/10/25(木) 09:59:050132デフォルトの名無しさん
2007/10/29(月) 22:11:15F#もそうなってるんですか?
0133デフォルトの名無しさん
2007/10/29(月) 22:16:40+ - * /
実数の演算子 :
+. -. *. /.
0134デフォルトの名無しさん
2007/10/29(月) 22:47:060135デフォルトの名無しさん
2007/10/29(月) 23:50:47> 1 + 0.1;;
1 + 0.1;;
----^^^^
stdin(7,4): error: FS0001: This expression has type
float
but is here used with type
int
stopped due to error
> 1.0 + 0.1;;
val it : float = 1.1
> 1.0 +. 0.1;;
1.0 +. 0.1;;
----^^^
stdin(9,4): warning: FS0062: This construct is for compatibility with OCaml. Use
the overloaded infix operator '+' instead. Disable this warning using --no-warn
62 or #nowarn "62"
val it : float = 1.1
0136デフォルトの名無しさん
2007/10/30(火) 10:22:05F#では演算子は共通になった。
.NETのサポートするデータ型を全部サポートしなきゃいけないのでこうなったものと思われる。
ただし暗黙の型変換はないので整数+実数の計算は変換が必要になる。
> 3.2 + float 2;;
val it : float = 5.2
0137デフォルトの名無しさん
2007/10/30(火) 10:24:250138デフォルトの名無しさん
2007/10/30(火) 13:41:110139デフォルトの名無しさん
2007/10/30(火) 15:13:400140デフォルトの名無しさん
2007/11/07(水) 23:39:110141デフォルトの名無しさん
2007/11/13(火) 01:04:380142デフォルトの名無しさん
2007/11/14(水) 00:21:330143名無しさん♯
2007/11/19(月) 14:52:34Asyncの実装がまた微妙に変わってますがな・・・。(´・ω・`)
0144デフォルトの名無しさん
2007/11/19(月) 16:38:48この言語は普及するのかな
0145名無しさん♯
2007/11/19(月) 20:25:010146デフォルトの名無しさん
2007/11/19(月) 23:47:010147デフォルトの名無しさん
2007/11/20(火) 16:06:160148名無しさん♯
2007/11/20(火) 16:20:04type Async a = Cont () (Either a Exception)
って脳内変換すれば、unit, bindの実装の意味が理解できることに最近気がついた。
で、ごく一部の方々がActionを使った継続をやけに議論してた意味もようやくわかった。(つД`)
0149名無しさん♯
2007/11/20(火) 20:05:10エラー系の継続を最初からずっと保持してなきゃならんので、結局
type Async a = (a -> (), Exception -> ()) -> ()
こうするしかないですわ。(´・ω・`)
でも、Asyncってモナド則を満たしてるんかいなという新たな疑問も・・・。
0150名無しさん♯
2007/11/20(火) 20:14:12data Async a = Async ((a -> (), Exception -> ()) -> ())
0151名無しさん♯
2007/11/21(水) 08:05:42#light
type Async<'a> = Async of (('a -> unit) * (exn -> unit) -> unit)
with
static member Run (Async x) = x
let unit a = Async (fun (cont, _) -> cont a)
let bind m k =
Async (fun (cont, econt) ->
let cnext = fun a -> try Async.Run (k a) (cont, econt) with exn -> econt exn
Async.Run m (cnext, econt))
で、実際にはここでのunit→resultPrim, bind→bindAsyncPrim相当でしかなくて、
これにキャンセルサポート(AsyncGroup)を追加してはじめてresultAsync, bindAsync相当になる、と。
モナドの定義自体にはスレッド云々は関係なくて、モナドを起動する側(Run, Spawn)の方で
スレッドに結びつけてる、と。
これをC#で表現するのはめんどいのう。(´・ω・`)
0152デフォルトの名無しさん
2007/11/21(水) 13:31:20フローチャートのように。
それが出来ないと、企業で使うのは難しいと思う。
0153デフォルトの名無しさん
2007/11/21(水) 13:48:560154デフォルトの名無しさん
2007/11/21(水) 13:53:480155デフォルトの名無しさん
2007/11/21(水) 14:30:48「Javaはむずかしすぎて使えません!」とギャグでなく主張する
ド低脳にとっては関数型言語のほうが簡単なのですか?
そうでないと、ドカタが使うのは難しいと思う。
こうだろ。
0156デフォルトの名無しさん
2007/11/21(水) 14:38:190157名無しさん♯
2007/11/21(水) 21:33:54Async.Runは Async<'a> -> 'a にしないとダメなのか・・・。
>>151の実装は flip asyncApp 相当に過ぎないか。
0158名無しさん♯
2007/11/22(木) 01:13:05#light
type Async<'a> = Async of (('a -> unit) * (exn -> unit) -> unit)
let app (Async x) = x
let unit a = Async (fun (cont, _) -> cont a)
let bind m k =
Async (fun (cont, econt) ->
let c = fun a -> try app (k a) (cont, econt) with exn -> econt exn
app m (c, econt))
let catch p =
Async (fun (cont, _) ->
app p (cont << Choice2_1, cont << Choice2_2))
let start p = app p ((fun () -> ()), (fun exn -> raise exn))
type Async<'a> with
static member Run p =
let res = ref None // val res : Choice<'a, exn> option ref
let cont = fun r -> res := Some r; unit ()
start (bind (catch p) cont)
match Option.get !res with
| Choice2_1 a -> a
| Choice2_2 exn -> raise exn
これでAsync.Spawn, Async.Parallelまで挑戦するのは無理ぽ。(´・ω・`)
0159デフォルトの名無しさん
2007/11/22(木) 12:12:020160デフォルトの名無しさん
2007/11/22(木) 23:56:53図星だったようだね。
0161デフォルトの名無しさん
2007/11/23(金) 00:06:190162デフォルトの名無しさん
2007/11/23(金) 01:28:54使ってれば?
あと>>155が答え。
0163名無しさん♯
2007/11/23(金) 12:20:33let id x = x
let start p = app p (id, (fun exn -> raise exn))
0164名無しさん♯
2007/11/23(金) 17:12:31ttp://channel9.msdn.com/Showpost.aspx?postid=358968
コメント欄もなかなか熱い。(;^ω^)
0165デフォルトの名無しさん
2007/11/24(土) 01:29:290166デフォルトの名無しさん
2007/11/24(土) 01:46:59165の様な要望に対しては手一杯
0167名無しさん♯
2007/11/27(火) 22:37:56ttp://cid-c42499cb3a347006.skydrive.live.com/self.aspx/Public/DLRSample.fs
0168デフォルトの名無しさん
2007/11/28(水) 01:53:52htmlは読みにくいからpdfのドキュメントはないの?
0169名無しさん♯
2007/11/28(水) 17:21:32(.ppt注意)
ttp://qcon.infoq.com/sanfrancisco/file?path=/QConSF2007/slides/public/ErikMeijer_LINQIntro.ppt
ttp://qcon.infoq.com/sanfrancisco/file?path=/QConSF2007/slides/public/ErikMeijer_Confessions.ppt
モナドの観点では、LINQの標準クエリ演算子で最重要なのは実は SelectMany なのね。
>>168
日本語の解説は見たことないです。
英語のなら最近すごくいい入門記事が出ましたが・・・。
ttp://tomasp.net/articles/fsharp-i-introduction/article.pdf
0170デフォルトの名無しさん
2007/11/28(水) 21:07:15モンドリアン風なのが気に入ったw
0171デフォルトの名無しさん
2007/11/29(木) 01:54:58すべてにおいてC#が優っているように思えるのだが。
0172デフォルトの名無しさん
2007/11/29(木) 02:04:460173デフォルトの名無しさん
2007/11/29(木) 02:06:18無いなら使わないけど。
0174デフォルトの名無しさん
2007/11/29(木) 04:51:480175デフォルトの名無しさん
2007/11/29(木) 05:38:330176デフォルトの名無しさん
2007/11/29(木) 20:23:520177デフォルトの名無しさん
2007/11/29(木) 20:49:050178デフォルトの名無しさん
2007/11/29(木) 21:22:37F#でできることすべてはC#でできる。
0179デフォルトの名無しさん
2007/11/30(金) 01:29:160180デフォルトの名無しさん
2007/11/30(金) 01:30:020181デフォルトの名無しさん
2007/11/30(金) 01:41:231行目から C# ∩ F# = φ
2行目から F# ⊆ C#
∴F# = φ
アッー
0182デフォルトの名無しさん
2007/11/30(金) 01:45:500183デフォルトの名無しさん
2007/11/30(金) 01:52:06ではなく
C#でできることにはF#でできないことがある。
という意味なのか
0184デフォルトの名無しさん
2007/11/30(金) 01:59:020185デフォルトの名無しさん
2007/11/30(金) 02:00:23C#では
var f = i=>i
で型推論が働かず、コンパイルが通らない。
F#ではできる!(=F#でしかできない事)
という認識で良いでしょうか?
0186デフォルトの名無しさん
2007/11/30(金) 09:14:420187名無しさん♯
2007/11/30(金) 10:30:03ttp://research.microsoft.com/research/downloads/Details/e8478d6b-49c0-4750-80eb-0e424d1631a3/Details.aspx
そして待望のこれ。F#との相性よろし。(´ー`)
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=e848dc1d-5be3-4941-8705-024bc7f180ba&DisplayLang=en
改めてこちらにも注目。
ttp://research.microsoft.com/research/downloads/Details/f9d6994e-45f6-49b8-b3c9-2a44bb2a4c50/Details.aspx
0188デフォルトの名無しさん
2007/11/30(金) 10:50:050189デフォルトの名無しさん
2007/11/30(金) 10:58:200190名無しさん♯
2007/11/30(金) 18:05:31System.Linq.Parallel.Enumerable
まぎらわしい・・・。(´・ω・`)
前者はIParallelEnumerable用、後者はIEnumerable用。
0191名無しさん♯
2007/11/30(金) 19:00:00オリジナルのEnumerableにもこれ付けてほしかったのに。(つД`)
0192名無しさん♯
2007/11/30(金) 19:36:06Parallel.For<TLocal>
Parallel.ForEach<TSource, TLocal>
がその代わりらしい。でも、使い方がちょっとわかりにくい・・・。(´・ω・`)
0193名無しさん♯
2007/11/30(金) 20:05:28ForEachのつもりで使うと、順番がバラバラで困ったことになる。
MSDN Magazineできちんと解説してた内容をすっかり忘れてた・・・。orz
ttp://msdn.microsoft.com/msdnmag/issues/07/10/PLINQ/default.aspx
0194デフォルトの名無しさん
2007/11/30(金) 23:25:34http://www.microsoft.com/downloads/details.aspx?FamilyID=e848dc1d-5be3-4941-8705-024bc7f180ba&DisplayLang=en
http://research.microsoft.com/research/downloads/Details/f9d6994e-45f6-49b8-b3c9-2a44bb2a4c50/Details.aspx
0195名無しさん♯
2007/12/01(土) 00:16:490196名無しさん♯
2007/12/01(土) 13:20:31#r "System.Core.dll";
#r "System.Threading.dll";
#light
open System
open System.Linq
open System.Threading
open Int32
let _ =
let sum = ref (to_int64 0)
do Parallel.For(0, 1000000,
new Func<_>(fun _ -> !sum),
new Action<_,ParallelState<_>>(fun i st ->
st.ThreadLocalState <- st.ThreadLocalState + (to_int64 (i + 1))),
new Action<_>(fun localSum -> Interlocked.Add (sum, localSum) |> ignore))
Console.WriteLine("TPL : {0}", !sum)
let _ =
let seq = ParallelEnumerable.Range(1, 1000000)
ParallelEnumerable.Aggregate(seq, to_int64 0, new Func<_,_,_>(fun sum i -> sum + (to_int64 i)))
|> fun sum -> Console.WriteLine("PLinq : {0}", sum)
0197名無しさん♯
2007/12/02(日) 01:01:31quadで動かしてみたいのう。(´・ω・`)
0198名無しさん♯
2007/12/02(日) 23:54:31ttp://cid-c42499cb3a347006.skydrive.live.com/self.aspx/Public/LinqUtils.cs
C#も十分関数的ですのう。(´・ω・`)
0199デフォルトの名無しさん
2007/12/03(月) 03:17:530200デフォルトの名無しさん
2007/12/03(月) 04:41:19・Unitは確かにムズムズするな。unit 型と混乱しそう。
・IsEmptyの実装は Enumerable.Count<T>使うより
Enumerable.Any<T>使った方が良いんでは?
Count使うと無限リストで死ねる。
てかAnyがあるからIsEmpty要らん気もするけど。個人的には。
0201デフォルトの名無しさん
2007/12/03(月) 09:10:48関数型っぽく遊べるようになるんだがな。
0202デフォルトの名無しさん
2007/12/03(月) 09:14:32.net frameworkって糊を上手く使う所ってことで
0203名無しさん♯
2007/12/03(月) 10:49:17コメント感謝です。
> ・Unitは確かにムズムズするな。unit 型と混乱しそう。
前は「Lift」って名前にしてたんですが、そっちの方がわかりやすいでしょうか?
> ・IsEmptyの実装は Enumerable.Count<T>使うより
> Enumerable.Any<T>使った方が良いんでは?
Anyの使い方を知らなかっただけでつ。(´・ω:;.:...
勉強になりますのう。
0204デフォルトの名無しさん
2007/12/03(月) 11:17:49個人的にはLiftで良いと思う。
ただ、.NET全般として見たときには
Nullableのところで"Lift"を使っちゃってて面倒鴨。
ttp://msdn2.microsoft.com/en-us/library/system.linq.expressions.unaryexpression.islifted(VS.90).aspx
monadがあればこの辺のメタな名前の衝突は回避できるというか統合できるのかのぅ。
0205名無しさん♯
2007/12/03(月) 11:29:57修正しますた。ついでに使用例も。( ゚д゚)ノ
ttp://cid-c42499cb3a347006.skydrive.live.com/self.aspx/Public/LinqUtilsDemo.cs
> monadがあればこの辺のメタな名前の衝突は回避できるというか統合できるのかのぅ。
monoid派が「Unit, Bindにすべし!」と言い出す悪寒・・・。
0206名無しさん♯
2007/12/03(月) 23:16:44かなり必要 → ZipWith
できれば必要 → Lift (T -> IEnumerable<T> のインターフェイスで)
ぐらいで、他は別にイラネって感じかもしれん・・・。(´・ω・`)
0207名無しさん♯
2007/12/03(月) 23:35:510208デフォルトの名無しさん
2007/12/04(火) 00:29:380209名無しさん♯
2007/12/04(火) 20:11:20でもそれって何てjava.util.concurrent?(´・ω・`)
0210デフォルトの名無しさん
2007/12/20(木) 02:46:460211デフォルトの名無しさん
2007/12/21(金) 08:06:210212デフォルトの名無しさん
2007/12/21(金) 08:42:240213デフォルトの名無しさん
2007/12/21(金) 14:10:280214デフォルトの名無しさん
2007/12/21(金) 14:41:19次は $ シリーズを展開してくれると期待している.
0215デフォルトの名無しさん
2007/12/21(金) 23:44:560216デフォルトの名無しさん
2007/12/23(日) 23:59:49CL, Scheme, SML, OCaml なんかを比べているのであれば、
どれも大差無い様に見えるけど。歴史的に一番泥臭いのは
CL だろうけど…
0217名無しさん♯
2007/12/24(月) 10:52:24F#よりもHaskellに近い希ガス。
もしかしたら、C# 4.0のヒントもこの中にあるのかもしれん。(´・ω・`)
0218デフォルトの名無しさん
2007/12/24(月) 11:24:46第7回 Scala 2.6.0-final
http://gihyo.jp/dev/serial/01/awdp/0007
初めて名前聞いた.
ところでみんな将来的には業務に使おうと思ってF#とか
関数型言語をいじってるの?
0219デフォルトの名無しさん
2007/12/26(水) 03:54:290220名無しさん♯
2007/12/26(水) 11:42:54ttp://www.cs.kuleuven.be/~adriaan/?q=genericshk
これをJVM上の言語で実現したのはすごいなあ。
一方、.NETの方では・・・。(´・ω・`)
ttp://www.haskell.org/pipermail/glasgow-haskell-users/2005-January/007603.html
0221名無しさん♯
2007/12/26(水) 21:40:07trait Monad[M[_]] {
def returnM[T](x: T): M[T]
def bindM[T, U](m: M[T], f: T => M[U]): M[U]
}
abstract class Maybe[T]
case class Just[T](x: T) extends Maybe[T]
case class None[T] extends Maybe[T]
object Test {
implicit object MaybeMonad extends Monad[Maybe] {
def returnM[T](x: T) = Just(x)
def bindM[T, U](m: Maybe[T], f: T => Maybe[U]): Maybe[U] = m match {
case Just(x) => f(x)
case _ => None()
}
}
def test[T, U](a: Maybe[T], f: T => U)(implicit m: Monad[Maybe]) {
m.bindM(a, (b: T) => m.returnM(f(b))) match {
case Just(x) => println(x)
case _ => println("None")
}
}
def main(args: Array[String]) {
test(Just(100), (x: Int) => x + x) // 200
test(None(), (x: Int) => x + x) // None
}
}
testの第1引数にMaybeを使ってしまうと、Monadで汎化した意味がないような・・・。
0222名無しさん♯
2007/12/26(水) 21:52:510223名無しさん♯
2007/12/26(水) 22:23:36def test[M[_], T, U](a: M[T], f: T => U)(implicit m: Monad[M]) {
m.bindM(a, (b: T) => m.returnM(f(b)))
}
0224名無しさん♯
2007/12/26(水) 22:50:550225名無しさん♯
2007/12/26(水) 23:11:49trait Monad[M[_]] {
def returnM[T](x: T): M[T]
def bindM[T, U](m: M[T], f: T => M[U]): M[U]
}
abstract class Maybe[T]
case class Just[T](x: T) extends Maybe[T]
case class Nothing[T] extends Maybe[T]
object Test {
implicit object MaybeMonad extends Monad[Maybe] {
def returnM[T](x: T) = Just(x)
def bindM[T, U](m: Maybe[T], f: T => Maybe[U]) = m match {
case Just(x) => f(x)
case _ => Nothing[U]()
}
}
def test[M[_], T, U](x: M[T], f: T => U)(implicit m: Monad[M]) =
m.bindM(x, (y: T) => m.returnM(f(y)))
def main(args: Array[String]) {
def p[T](m: Maybe[T]) = m match {
case Just(x) => println(x)
case _ => println("Nothing")
}
p(test[Maybe,Int,Int](Just(100), (x: Int) => x + x))
p(test[Maybe,Int,Int](Nothing(), (x: Int) => x + x))
}
}
0226デフォルトの名無しさん
2007/12/27(木) 14:09:13日本でもかまわんけれど、実際のシステムで使われてるかなど教えてエロイ人
0227デフォルトの名無しさん
2007/12/29(土) 14:46:20実際は雑用とかだろ
0228デフォルトの名無しさん
2007/12/29(土) 14:59:22そのコードF#ですか?
>>226
基本的には.netアプリだけど、ASP.NETでスクリプト的に使うんだろうな〜
まあIronPythonもそうだがちゃんとしたフォームデザイナがないとGUIアプリは作りづらいし
当然C#とかVBを置き換わるものではない
ってか常識で考えろ
0229デフォルトの名無しさん
2007/12/29(土) 23:12:31常識が何をさしてるのか知らんが、別に既存の業務土方アプリ作るのにF#使うことは無いでしょう。
まぁF#のほうが生産性高いとは思うけれど、メンテや技術者の人数から見ても選択されることはないかと。
それよりも自分が見たのは、何かの科学計算に向けての実験的なアプリの作成などに絡む部門だったような。Lispとかの経験でも可とかいってたから何か面白そうなにおいがした。
0230名無しさん♯
2008/01/04(金) 22:35:35関数型としては扱いづらいですね・・・。(´・ω・`)
F#の比較対象としては不向きかも。
0231名無しさん♯
2008/01/06(日) 21:44:12hoge.fsを実行してそのまま終了。
今までこのオプションを知らんかった・・・。orz
そうなると、DLRの使い道が一気に減ってしまうがな。(´・ω・`)
0232デフォルトの名無しさん
2008/01/19(土) 17:56:270233デフォルトの名無しさん
2008/02/02(土) 08:32:45IronRubyの中の人による、Lang.NETのまとめ
へじたんのお言葉
I think that the taxonomies of programming languages are breaking down. I think that languages are fast becoming amalgam. ... I think that in 10 years, there won't be any way to categorize languages as dynamic, static, procedural, object, and so on.
だそうで。
F#の学習はいい先行投資かもしれないねぇ。まぁ楽しいからやってるんですし、皆さんそうなんでしょうけど。
0234デフォルトの名無しさん
2008/02/03(日) 00:18:28F#製品に使うことにするノシ
0235デフォルトの名無しさん
2008/02/03(日) 16:13:36letに宣言と式があるなんて知らんかったし、do,doneとかもかなり混乱する
Web上だとそういう初歩の情報ないし。
OCaml入門は読むべしだ。互換性とか適当だけど。
Expert F#は割とわかりやすかった
0236デフォルトの名無しさん
2008/02/08(金) 00:45:430237デフォルトの名無しさん
2008/02/08(金) 00:49:550238名無しさん♯
2008/02/24(日) 01:19:50C# LINQに比べると、やっぱり圧倒的に記述しやすいわ。
#light
open System
open Seq
let ap_snd f (a, b) = (a, f b)
// MapReduce
let map_reduce m r =
map_concat m
>> groupBy fst
>> orderBy fst
>> map (ap_snd (map snd) >> r)
0239名無しさん♯
2008/02/24(日) 01:20:36// word count demo
let mapper (_, v : string) =
v.Split [| ' '; ','; '.'; '!' |]
|> filter (not << String.IsNullOrEmpty)
|> map (fun s -> (s.ToLower(), 1))
let reducer = ap_snd (fold1 (+))
let data =
[ "This is a pen.";
"Hello, World!";
"All your base are belong to us.";
"My name is nanashi." ]
let _ =
mapi (fun i s -> (i, s)) data
|> map_reduce mapper reducer
|> iter (fun (k, v) -> Console.WriteLine("{0}\t{1}", k, v))
0240名無しさん♯
2008/02/24(日) 12:44:20using System;
using System.Collections.Generic;
using System.Linq;
// MapReduce
public interface IMapper<K1, V1, K2, V2> {
IEnumerable<KeyValuePair<K2, V2>> Map(KeyValuePair<K1, V1> p);
}
public interface IReducer<K2, V2, K3, V3> {
KeyValuePair<K3, V3> Reduce(KeyValuePair<K2, IEnumerable<V2>> p);
}
public class MapReduceJob<K1, V1, K2, V2, K3, V3> {
Func<KeyValuePair<K1, V1>, IEnumerable<KeyValuePair<K2, V2>>> mapper;
Func<KeyValuePair<K2, IEnumerable<V2>>, KeyValuePair<K3, V3>> reducer;
public MapReduceJob(IMapper<K1, V1, K2, V2> mapper, IReducer<K2, V2, K3, V3> reducer) {
this.mapper = mapper.Map;
this.reducer = reducer.Reduce;
}
0241名無しさん♯
2008/02/24(日) 12:55:01public IEnumerable<KeyValuePair<K3, V3>> Execute(IEnumerable<KeyValuePair<K1, V1>> data) {
return from d in data
from p in mapper(d)
group p.Value by p.Key into g
orderby g.Key
select reducer(new KeyValuePair<K2, IEnumerable<V2>>(g.Key, g));
}
}
// word count
class WCMapper : IMapper<int, string, string, int> {
public IEnumerable<KeyValuePair<string, int>> Map(KeyValuePair<int, string> p) {
return from s in p.Value.Split(' ', ',', '.', '!')
where !String.IsNullOrEmpty(s)
select new KeyValuePair<string, int>(s.ToLower(), 1);
}
}
class WCReducer : IReducer<string, int, string, int> {
public KeyValuePair<string, int> Reduce(KeyValuePair<string, IEnumerable<int>> p) {
return new KeyValuePair<string, int>(p.Key, p.Value.Sum());
}
}
0242名無しさん♯
2008/02/24(日) 12:55:35static class Test {
static string[] data = {
"This is a pen.",
"Hello, World!",
"All your base are belong to us.",
"My name is nanashi."
};
static void Main() {
var d = data.Select((s, i) => new KeyValuePair<int, string>(i, s));
var job = new MapReduceJob<int, string, string, int, string, int>(new WCMapper(), new WCReducer());
foreach (var p in job.Execute(d)) {
Console.WriteLine("{0}\t{1}", p.Key, p.Value);
}
}
}
0243名無しさん♯
2008/02/24(日) 13:37:52Map -> SelectじゃなくてSelectMany(generator的な操作)
Reduce -> 確かにAggregateの操作だけど、厳密にはSelectの中で(selectorとして)実行されるAggregate
だったのね。実際に書いてみないとなかなか気づけんわ。(´・ω・`)
0244名無しさん♯
2008/02/24(日) 13:48:26末尾再帰のスタイルはどちらがお好み?
#light
// val sum : int list -> int
let sum1 l =
let rec sum' l v =
match l with
| [] -> v
| h::t -> sum' t (v + h)
sum' l 0
let sum2 =
let rec sum' v = function
| [] -> v
| h::t -> sum' (v + h) t
sum' 0
要は、sum' の引数の順番の問題なのですが・・・。
0245デフォルトの名無しさん
2008/02/24(日) 14:32:14もともと引数は「入力、出力」の順で書いてたので。
末尾再帰は局所定義にすることがほとんどで
部分適用をしないから、それでもいいかなと。
0246名無しさん♯
2008/02/24(日) 16:11:10>>245
> もともと引数は「入力、出力」の順で書いてたので。
確かにそうですね・・・。
sum2の方は一見ムダがないですけど、意味的にはちょっと無理やりなのかもしれませんね・・・。(´・ω・`)
0247デフォルトの名無しさん
2008/02/24(日) 19:26:500248名無しさん♯
2008/02/25(月) 14:49:13import Data.Char
import Data.List hiding (groupBy)
-- MapReduce
mapReduce :: (Ord k) => (a -> [(k, v)]) -> ((k, [v]) -> b) -> [a] -> [b]
mapReduce m r = map r . orderBy fst . groupBy fst snd . concatMap m
-- word count
mapper :: (Int, String) -> [(String, Int)]
mapper (_, v) = map (\s -> (map toLower s, 1)) . filter (not . null) $ split " ,.!?" v
reducer :: (String, [Int]) -> (String, Int)
reducer (k, v) = (k, sum v)
-- test
data_ = [ "What is this?",
"This is a pen.",
"Hello, World!",
"All your base are belong to us" ]
main = mapM_ p $ mapReduce mapper reducer $ zip (iterate (+1) 0) data_
where
p (k, v) = putStrLn $ show k ++ "\t" ++ show v
0249名無しさん♯
2008/02/25(月) 14:50:11-- utils
orderBy :: (Ord k) => (a -> k) -> [a] -> [a]
orderBy fk = sortBy (\x y -> fk x `compare` fk y)
groupBy :: (Eq k) => (a -> k) -> (a -> v) -> [a] -> [(k, [v])]
groupBy _ _ [] = []
groupBy fk fv l = let key = fk $ head l in
let (g, rest) = partition (\x -> fk x == key) l in
(key, map fv g) : groupBy fk fv rest
split :: [Char] -> String -> [String]
split sep s = case break (\c -> any (==c) sep) s of
(v, []) -> [v]
(v, h:t) -> v : split sep t
0250名無しさん♯
2008/02/25(月) 14:52:450251名無しさん♯
2008/02/25(月) 20:37:46mapper :: (Int, String) -> [(String, Int)]
mapper = map (\s -> (map toLower s, 1)) . filter (not . null) . split " ,.!?" . snd
0252デフォルトの名無しさん
2008/02/26(火) 20:27:170253デフォルトの名無しさん
2008/03/07(金) 07:36:31NTP対応って何よ?
これか
>米国国家毒性プログラム(べいこくこっかどくせいプログラム、英: National Toxicology Program 、略称: NTP )
とはアメリカ保健社会福祉省が実施している化学物質の毒性研究をまとめ、発がん性物質の分類、試験を行う計画である。
0254デフォルトの名無しさん
2008/03/07(金) 08:01:100255デフォルトの名無しさん
2008/03/07(金) 12:12:170256デフォルトの名無しさん
2008/03/07(金) 14:34:540257デフォルトの名無しさん
2008/03/09(日) 09:58:070258デフォルトの名無しさん
2008/03/20(木) 09:33:17今のプログラムはC#で書いていて、その挙動の一部をカスタマイズできるように
したいのですが、せっかく覚え始めたF#で書ければいいなぁと思っています。
0259デフォルトの名無しさん
2008/03/20(木) 18:53:39あとは自分で調べろ>>258
0260デフォルトの名無しさん
2008/03/28(金) 15:38:29一応インストールはできたんだけど、コマンド打ってくだけ。
0261デフォルトの名無しさん
2008/03/28(金) 17:43:18あと、SharpDevelop 3.0で使えるようになる予定。Beta1で載った。
0262デフォルトの名無しさん
2008/03/28(金) 18:12:16Visual Studioがインストールされてないとだめみたいだ。VSShell単体って
どこにあるの?てか、あるの?
0263デフォルトの名無しさん
2008/03/28(金) 18:13:530264デフォルトの名無しさん
2008/03/28(金) 19:12:55で、いい本ないの?
0265デフォルトの名無しさん
2008/03/28(金) 19:15:17Foundations of F#
ネイティブが分かりにくいと酷評してるんだが、読んだ人どう?
0266デフォルトの名無しさん
2008/03/28(金) 19:40:56内容も別にExpert向けというわけでもないし。高度な話題も載ってるが。
0267デフォルトの名無しさん
2008/03/28(金) 19:56:18そうなんだ。
星の数のとおりか。
でも高いな。。
0268デフォルトの名無しさん
2008/04/19(土) 10:36:13[<DllImport("user32.dll", EntryPoint="PeekMessage" ,SetLastError=true,CallingConvention=CallingConvention.StdCall)>]
let PeekMessage( (lpMsg : ref MSG),(hwnd : Int32),(wMsgFilterMin : Int32),(wMsgFilterMax : Int32),(wRemoveMsg : PeekMsgOption)):bool = failwith "extern";;
エラーメッセージ
The type 'MSG' is not defined.
The type 'PeekMsgOption' is not defined.
MSG構造体については
自分の環境(Win2k,VS2005,.Net framework 2.0.50727.42)ではwindowsbase.dllがないようなので
これはXPかVistaを使えってことでしょうかね,..
http://msdn2.microsoft.com/ja-jp/library/system.windows.interop.msg.aspx
また、PeekMsgOptionはオンラインのMSDNではほとんど情報がないようです
そもそも、VS2005のF#プロジェクトでは「参照の追加」はできないのでしょうか?
0269268
2008/04/21(月) 00:39:32open System.Runtime.InteropServices;;
open System.Windows.Interop;;
[<System.Flags>]
type PeekMsgOption =
| PM_NOREMOVE = 0
| PM_REMOVE = 1;;
[<DllImport("user32.dll", EntryPoint="PeekMessage" ,SetLastError=true,CallingConvention=CallingConvention.StdCall)>]
let PeekMessage( (lpMsg : (ref <System.Windows.Interop.MSG>)),(hwnd : Int32),(wMsgFilterMin : Int32),(wMsgFilterMax : Int32),(wRemoveMsg : PeekMsgOption)):bool = failwith "extern";;
0270デフォルトの名無しさん
2008/04/21(月) 18:42:16System.Windows以下(Forms除く)は.NET Framework 3.0からのWPF。
そこのURLの先にもはっきりとこうかいてあるはずだ。
バージョン情報
.NET Framework
サポート対象 : 3.5、3.0 SP1、3.0
System.Windows.Forms.Messageなら2.0でも使える。
PeekMsgOptionについてさっぱり見つからないのは、
単にその2つの定数を宣言するためだけに即興で作ったからではないか?
もともとはただの符号無整数型だし。
http://msdn2.microsoft.com/en-us/library/ms644943(VS.85).aspx
0271デフォルトの名無しさん
2008/04/22(火) 01:51:43まじ.netとかそうなってるの?
そもそも実行できたのかあやしいんだが
0272デフォルトの名無しさん
2008/04/24(木) 19:14:11(lpMsg : (ref <System.Windows.Interop.MSG>)の箇所は
(lpMsg :System.Windows.Interop.MSG)にしないと実行時にマーシャリング系のエラーが出る。
しかしどちらにせよ、デバッグモードで動かすと構造体のサイズ違うっていわれるから
自分でMSG構造体定義した。
..けれど結局、やりたかったことは、Win32API使わなくてもできたよotz
0273デフォルトの名無しさん
2008/05/02(金) 08:32:370274デフォルトの名無しさん
2008/05/03(土) 23:26:43OCaml, Haskell, Lispなどの関数型言語はラムダ計算という理論が骨組みにあって、
特別な構文を使わずに、柔軟なプログラミングをすることができる。
関数を抽象化するためのdelegateや、多相型を表現するためのgenericsなども、
特別な構文無しにプログラムできる。
しかも、キャストや、nullを使う言語よりも、実行時の安全性が高い。
関数型言語を知っている学生は、プログラミングの質に対する意識が非常に高いのが多い。
OCamlができる優秀な学生を雇って、F#のプロジェクトをやれば、いいんじゃね。
0275デフォルトの名無しさん
2008/05/04(日) 17:14:410276デフォルトの名無しさん
2008/05/04(日) 17:35:07学生 プッ
0277デフォルトの名無しさん
2008/05/05(月) 01:32:22F#の開発環境って何があるんでしょうか?
・VS.NET拡張
・エディタとコンパイラ
以外にはありませんか?
0278デフォルトの名無しさん
2008/05/05(月) 07:15:190279デフォルトの名無しさん
2008/05/05(月) 07:43:21Expertというわりにぜんぜん入門から対応しているから、いいね。
しかし、600ページ以上あって読み応えありすぎだw
0280デフォルトの名無しさん
2008/05/05(月) 07:44:25good! 補間や履歴も聞いていいですな。
しかしC-Aで行頭、C-Eで行末移動がほしかったな
0281デフォルトの名無しさん
2008/05/05(月) 08:06:22ただ、分厚いから俺は辞書的に使ってる
>>280
つ fsi用のEmacsモード作ろうぜってスレッド。俺は試したことないけども参考までに
ttp://cs.hubfs.net/forums/thread/4004.aspx
0282デフォルトの名無しさん
2008/05/05(月) 14:23:56ttp://www.infoq.com/jp/news/2008/03/sharpdev-3-beta
0283デフォルトの名無しさん
2008/05/11(日) 03:09:370284デフォルトの名無しさん
2008/05/11(日) 09:07:12ら
ん
0285デフォルトの名無しさん
2008/05/11(日) 18:42:58ttp://www.strangelights.com/fsharp/wiki/default.aspx/FSharpWiki/fslex.html
{ open Microsoft.FSharp.Text.Printf;; }
rule strtest = parse
| _ { printf "%c" (Lexing.lexeme_char lexbuf 0); strtest lexbuf }
| eof { raise End_of_file }
{
//こっから実行コード
let test s = strtest (Lexing.from_string s);;
try test "aiueo" with _ -> printf "\n--end--\n";;
try test "あいうえお" with _ -> printf "\n--end--\n";;
printf "あいうえお";;
}
実行結果
aiueo
--end--
?????
--end--
あいうえお
0286デフォルトの名無しさん
2008/05/17(土) 07:30:420287デフォルトの名無しさん
2008/05/17(土) 09:49:01List of CLI Languages - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/List_of_CLI_Languages
IronLisp, L#, DotLisp
NemerleもLispを参考にしてるらしいな
0288デフォルトの名無しさん
2008/05/17(土) 10:33:20P#とかA#とかあるw
0289デフォルトの名無しさん
2008/05/17(土) 11:03:430290デフォルトの名無しさん
2008/05/17(土) 11:54:21MSIL (っていうのか?)上での方がバリエーションが多いなぁ.
これって一応MS的にはドッキリ大成功みたいな感じなのかね?
0291デフォルトの名無しさん
2008/05/17(土) 13:37:21MSは.NET 1.0のSDKにLISPのコンパイラを付けてたくらいだから
最初から狙って取りに行ってたんだと思うよ。
0292デフォルトの名無しさん
2008/05/17(土) 20:56:320293デフォルトの名無しさん
2008/05/17(土) 22:29:12そもそもこの例ではfold_leftを使って、
let sum = fold_left (+) 0
のようにできるのでは。(やぼですかそうですか)
末尾再帰のスタイルとしてはsum2の方がよい気がします。
>もともと引数は「入力、出力」の順で書いてたので。
関数型言語では、部分適用などができるから、この考え方はやめた方が。
0294デフォルトの名無しさん
2008/05/24(土) 02:19:35今Visioのオートメーションのプログラム作ってて、以下の定数と
http://msdn.microsoft.com/ja-jp/library/cc376719.aspx
以下のオブジェクトのTypeの値を比較する文が書きたいが
http://msdn.microsoft.com/ja-jp/library/cc377211.aspx
型があわないと文句言われます
今の俺の認識
deprecated1:Idiomを使う
deprecated2:Enum.combineを使う
今後:|||や&&&などのBitwise andやorを使う。最新版にコンパイラ変えたら、これつかえと警告でた
以下思いつく限り試してみたもの。全滅
if (obj.Type = Visio.VisShapeTypes.visTypeGuide) then ...
if ((obj.Type &&& Visio.VisShapeTypes.visTypeGuide) <> 0) then ...
if (obj.Type = (Visio.VisShapeTypes.visTypeGuide : int16)) then ...
if (obj.Type = (Visio.VisShapeTypes.visTypeGuide :> int16)) then ...
if (obj.Type = (Visio.VisShapeTypes.visTypeGuide :?> int16)) then ...
if ((obj.Type:>int) = (Visio.VisShapeTypes.visTypeGuide :> int)) then ...
msg (Microsoft.FSharp.Compatibility.OCaml.Obj.magic (s.Type.ToString())); (* これは数値5 *)
msg (Microsoft.FSharp.Compatibility.OCaml.Obj.magic (Visio.VisShapeTypes.visTypeGuide.ToString())); (* これは文字列が出る *)
(obj.magic ごにゃごにゃ).ToString()はエラーになります
0295デフォルトの名無しさん
2008/06/05(木) 08:25:16F# プログラムってこうなの?
0296デフォルトの名無しさん
2008/06/05(木) 09:33:500297デフォルトの名無しさん
2008/06/05(木) 10:31:350298デフォルトの名無しさん
2008/06/07(土) 13:13:100299デフォルトの名無しさん
2008/06/08(日) 01:17:340300デフォルトの名無しさん
2008/06/08(日) 08:25:13SML#ist?
0301デフォルトの名無しさん
2008/06/08(日) 10:44:49オブジェクティブラクダ
0302デフォルトの名無しさん
2008/06/08(日) 14:26:150303デフォルトの名無しさん
2008/06/15(日) 17:59:55Camlはフランス語でラクダ(キャメル)の意。
オブジェクティブキャメラー。
0304デフォルトの名無しさん
2008/06/15(日) 20:17:580305デフォルトの名無しさん
2008/06/16(月) 05:50:15大嘘こいてんじゃねーよ
0306デフォルトの名無しさん
2008/06/16(月) 08:30:41A: Abstract
M: Machine
L: Language
0307デフォルトの名無しさん
2008/06/16(月) 14:44:39低脳w
0308デフォルトの名無しさん
2008/06/16(月) 20:21:27仮に camelのつもりだとしてもない
0309デフォルトの名無しさん
2008/06/16(月) 21:41:05camlはフランス語にあるよw
0310デフォルトの名無しさん
2008/06/16(月) 22:35:110311デフォルトの名無しさん
2008/06/16(月) 23:53:02ない
0312デフォルトの名無しさん
2008/06/17(火) 01:28:22学習用の辞書に載ってないからってw
0313デフォルトの名無しさん
2008/06/17(火) 01:46:380314デフォルトの名無しさん
2008/06/17(火) 02:13:44日本もそういう季節になったの?
0315デフォルトの名無しさん
2008/06/17(火) 05:12:020316デフォルトの名無しさん
2008/06/17(火) 17:48:410317デフォルトの名無しさん
2008/06/27(金) 09:50:45IndexOutOfBounds例外が出る
初心者なので判断がつかず・・
let msg s = System.Windows.Forms.MessageBox.Show s |> ignore in
try
let h = List.find ((<)100) [1..10] in
printf "%A\r\n" h
with e -> msg (e.ToString());;
0318デフォルトの名無しさん
2008/06/27(金) 23:13:300319デフォルトの名無しさん
2008/06/28(土) 07:12:14ライブラリよりは俺のコードがバグってると思うんで
どっかしょぼい所でミスってるんじゃないかと思うが・・
let msg s = System.Windows.Forms.MessageBox.Show s |> ignore in
try
List.find ((<)100) [1..10] |> ignore
with e -> msg (e.ToString());;
0320デフォルトの名無しさん
2008/06/28(土) 07:56:45Not_found(System.Collections.Generic.KeyNotFoundException)例外が出るので
コードに問題はないはず
この例外は、.NET Framework version 2.0で追加されたものなので、
Microsoft .NET Framework Version 2.0 Redistributable Package
を入れれば直るんじゃない?
0321デフォルトの名無しさん
2008/06/28(土) 11:18:47私の環境の問題のようですね
F#のバージョンも1.9.3.14と少し古いので
あわせてバージョンアップしてみますわ
0322デフォルトの名無しさん
2008/06/29(日) 01:37:080323デフォルトの名無しさん
2008/07/01(火) 21:03:36Detailed Release Notes for F# 1.9.4
ttp://blogs.msdn.com/dsyme/archive/2008/05/02/full-release-notes-for-f-1-9-4.aspx
> Not_found now maps to KeyNotFoundException not IndexOutOfRangeException.
0324デフォルトの名無しさん
2008/07/08(火) 20:09:07コンパイルだけでもしたいのですが。。。
0325デフォルトの名無しさん
2008/07/08(火) 20:38:01zipを展開すると install-mono.sh が入っているからこれで動くんじゃないのかね。
0326デフォルトの名無しさん
2008/07/10(木) 01:28:11http://www.infoq.com/jp/articles/pickering-fsharp-async
0327デフォルトの名無しさん
2008/07/15(火) 12:14:541.9.4.19 release
0328デフォルトの名無しさん
2008/08/30(土) 07:27:00ttp://www.microsoft.com/downloads/details.aspx?FamilyID=61ad6924-93ad-48dc-8c67-60f7e7803d3c&DisplayLang=en
言語仕様からライブラリ構成まで、だいぶ変わったな
0329デフォルトの名無しさん
2008/08/30(土) 11:05:270330デフォルトの名無しさん
2008/08/30(土) 12:49:520331デフォルトの名無しさん
2008/08/30(土) 14:29:36ぷっ
理解できないからって・・・w
0332デフォルトの名無しさん
2008/08/30(土) 18:29:51ぷっ
理解できないからって・・・w
0333デフォルトの名無しさん
2008/08/30(土) 21:27:29理解できないからぶってぶって・・・w
0334デフォルトの名無しさん
2008/08/31(日) 18:01:34は?
0335デフォルトの名無しさん
2008/08/31(日) 18:06:01は?
0336デフォルトの名無しさん
2008/08/31(日) 18:14:01は?
0337デフォルトの名無しさん
2008/09/01(月) 00:19:390338デフォルトの名無しさん
2008/09/07(日) 01:30:34http://blogs.msdn.com/dsyme/archive/2008/08/29/detailed-release-notes-for-the-f-september-2008-ctp-release.aspx
Microsoft F#, September 2008 Community Technology Preview
http://www.microsoft.com/downloads/details.aspx?familyid=61ad6924-93ad-48dc-8c67-60f7e7803d3c&displaylang=en&tm
F# 1.9.6.2
0339デフォルトの名無しさん
2008/09/08(月) 13:19:45OCaml派生として使ってるやつばっかりだな
OCaml知らない俺から見るとなんかぜんぜんF#っぽくないし、
そっち系は面白くならないと思うが。
.NETライブラリ使ってるやつとかあんまいないのかね
0340デフォルトの名無しさん
2008/09/08(月) 20:26:38windows上の設置が簡単なocamlって扱いだからでないか?
人に渡すにしてもランタイムいらんし。
0341デフォルトの名無しさん
2008/09/11(木) 11:17:55前からあったサンプルプログラムがコンパイルできないよ。
CTP用のサンプルはDirectX関係がコンパイル出来ないし、
スレッド周りとか勉強したいんだけどなぁ。
0342デフォルトの名無しさん
2008/09/19(金) 15:40:170343デフォルトの名無しさん
2008/09/22(月) 23:34:56をVB.NET風に書こうと思ったけどめんどくさかったのでやめた
0344デフォルトの名無しさん
2008/09/24(水) 21:44:32#loadじゃ関数とかアクセスできないし、
再起動してfsi --useも起動の時間がかかりすぎて代わりにならない。
復活してくれんかな。
0345デフォルトの名無しさん
2008/10/12(日) 13:14:30細かいところでわからんことが多い
C#⇔F#コード対応表みたいなのがほしいわ
フック書きてぇ
0346デフォルトの名無しさん
2008/10/13(月) 09:33:20「関数型プログラミングの主な概念とF#での利用例」
http://codezine.jp/article/detail/3041
0347デフォルトの名無しさん
2008/10/13(月) 15:13:21P/Invoke宣言だけはC#で書いてしまえばいいんでない?
0348デフォルトの名無しさん
2008/10/13(月) 16:01:48[<DllImport("user32.dll",EntryPoint="SetWindowsHookEx",SetLastError=true)>] let ...
(たぶんdelegateキーワード使う)HOOKPROCの型がわからないので
実際そこでも詰まってるんだが、それがわかったとしても
SetHookの返り値をIntPtr.Zeroとどうやって比較するのかとか
わからない箇所あって、若干諦めてる
ところでF#にはいわゆるbreakやcontinueはないんですかね
for文の中でreturnするケースは手続き型の既存資産には多いと思うが
F#に移植しようと思ったら再帰等でロジックを考え直す必要があるとすると
作業コストが高い
break,last,return,continueなんかで言語仕様検索しても
それらしいのは見つからんね
0349デフォルトの名無しさん
2008/10/13(月) 16:12:45ttp://cs.hubfs.net/forums/thread/7118.aspx
0350デフォルトの名無しさん
2008/10/13(月) 19:17:02移植コストを下げることに意味はない
カエレ
0351デフォルトの名無しさん
2008/10/13(月) 19:27:220352デフォルトの名無しさん
2008/10/13(月) 19:43:070353デフォルトの名無しさん
2008/10/14(火) 09:33:33対象環境に言語処理系が無いとかなら分かるけど、.NETだぞ?
普通、DLL作ってFFI経由で呼び出しするだろ。
なんだか、同じ言語で書くことにこだわりすぎてる気がするけど。
0354デフォルトの名無しさん
2008/10/14(火) 22:37:30F#は関数型言語で全然違うから、考えを変える必要があるかもしれない
むしろC#とF#のコードの一対一対応表がつくれるくらい似てる言語なら、F#いらねーだろ。
0355デフォルトの名無しさん
2008/10/14(火) 22:44:09単に楽したいと思ったんだが、気に障ったならすまない
0356デフォルトの名無しさん
2008/10/15(水) 09:36:44関数型言語によるプログラミングスタイルの一種に
breakやcontinueを使わずに制御構造をくっつけていくという一派がある。
それを調べてみると面白いと思うよ。
listモナドとかmaybeモナドとか>>351の言ってるarrowとか。
ttp://d.hatena.ne.jp/r-west/20070720/1184946510
慣れるとむしろbreakやcontinueイラネになる。
0357デフォルトの名無しさん
2008/10/15(水) 14:47:07入れられなくないですか・・・?('A`)
>>356
ほー、参考になる
0358デフォルトの名無しさん
2008/10/15(水) 17:36:17プラグインとか機能追加系は製品版じゃなきゃ基本無理。
0359デフォルトの名無しさん
2008/10/15(水) 22:56:250360デフォルトの名無しさん
2008/10/16(木) 20:30:580361デフォルトの名無しさん
2008/10/16(木) 22:05:54関数a->bを渡すとarr a bが出来て、
arr a bの型に対する操作が色々あるんだろうと思うんだが
arr a bの型に当たる物はf#ではどう表現すれば良いのか
'a 'b tみたいに複数のジェネリックな型を持つことになる?
もしかしてHaskellのほうが抽象度が高いことができる?
0362デフォルトの名無しさん
2008/10/16(木) 22:07:122008はもってないんだよね・・・うpでとするいい機会だ
0363デフォルトの名無しさん
2008/10/17(金) 07:35:28higher kind genericsというやつで、F#の型システムでは再現は無理ぽ。(´・ω・`)
F#もどきで書くと、こんな感じのものが必要。
Arrow<'arr<'a, 'b>>
0364デフォルトの名無しさん
2008/10/17(金) 19:13:35Haskellは進んでるな
0365デフォルトの名無しさん
2008/10/18(土) 10:44:02Visual Studio 2008 Shell (integrated mode) Service Pack 1
http://www.microsoft.com/downloads/details.aspx?FamilyID=2e9a8c35-eb3d-43eb-9122-a5ec195cd7bb&DisplayLang=ja
0366デフォルトの名無しさん
2008/10/18(土) 16:24:25Thanx。shell runtime入れりゃよかったのね
0367デフォルトの名無しさん
2008/11/01(土) 12:44:35>>123とか
let _ = List.iter ((|>) ()) (List.map ((delay >> flip) (printf "closure %d\n" )) [1..10])
とかけば (unit -> unit) unit が10回ってわかるんだが…
0368デフォルトの名無しさん
2008/11/03(月) 11:54:03Seq.iter (fun n -> printf "closure %d\n" n) [1..10]
0369デフォルトの名無しさん
2008/11/08(土) 22:41:18type Attempt<'a> = unit -> 'a option
let runAttempt (a:Attempt<'a>) = () |> a
type AttemptBuilder() =
member b.Return(x) = fun () -> Some x
member b.Bind(p, rest) = match runAttempt p with None -> (fun () -> None) | Some x -> rest x
member b.Let(p, rest) = rest p
let attempt = new AttemptBuilder()
let failIfBig n = attempt { if n>1000 then return! (fun () -> None) else return n }
とあったとき、これ↓を de-sugar しろって問題なんだけど、
let sumIfBothSmall (i1, i2) =
attempt { let sum = ref 0
let! n1 = failIfBig i1
do sum := sum.Value+n1
let! n2 = failIfBig i2
do sum := sum.Value+n2
return sum.Value }
これ↓であってるかな?
let sumIfBothSmall2 (i1, i2) =
attempt.Let(ref 0, (fun sum ->
attempt.Bind(failIfBig i1, (fun n1 ->
attempt.Bind(attempt.Return(sum := sum.Value+n1), (fun () ->
attempt.Bind(failIfBig i2, (fun n2 ->
attempt.Bind(attempt.Return(sum := sum.Value+n2), (fun () ->
attempt.Return sum.Value))))))))))
見づらくて申し訳ない…
0370デフォルトの名無しさん
2008/11/10(月) 23:15:20let sumIfBothSmall2 (i1, i2) =
attempt.Let(ref 0, (fun sum ->
attempt.Bind(failIfBig i1, (fun n1 ->
attempt.Let(sum := sum.Value+n1, (fun () ->
attempt.Bind(failIfBig i2, (fun n2 ->
attempt.Let(sum := sum.Value+n2, (fun () ->
attempt.Return(sum.Value)))))))))))
ここ見る限り
http://blogs.msdn.com/dsyme/archive/2007/09/22/some-details-on-f-computation-expressions-aka-monadic-or-workflow-syntax.aspx
0371369
2008/11/15(土) 21:52:50ようやく理解できたような
ありがとう
0372デフォルトの名無しさん
2008/11/23(日) 10:37:08Microsoft.FSharp.Collections.ResizeArrayがそうかと思ったら、
Note: an abbreviation for List<'a>て書いてあたよ
0373デフォルトの名無しさん
2008/11/23(日) 12:58:16Microsoft.FSharp.Collections.List<'a> と System.Collections.Generic.List<'a> は別物
ttp://research.microsoft.com/fsharp/manual/FSharp.Core/Microsoft.FSharp.Collections.html
0374デフォルトの名無しさん
2008/11/27(木) 09:16:400375デフォルトの名無しさん
2008/11/29(土) 21:53:44フォームを表示するアプリケーションを作る場合、現状では.NET Version2のSystem.Windows.Forms.dll
を参照するしかないんでしょうか?
0376375
2008/11/29(土) 22:24:55アセンブリ System.Windows.Forms
.NET Framework 3.5, .NET Framework 3.0, .NET Framework 2.0 のメンバ
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll
と書いてあったので、今の設定で良さそうです。
0377デフォルトの名無しさん
2008/12/05(金) 18:55:21http://messages.yahoo.co.jp/bbs?.mm=GN&action=5&board=552022058&tid=cf9qa4nhbfffca5ga5b&sid=552022058&mid=83344
http://sora1975.blog88.fc2.com/blog-entry-144.html
リンク先を見て危機を感じるなら、コピペを貼ってください。
0378デフォルトの名無しさん
2008/12/11(木) 20:42:09IEnumerable.iterで怒られる。iterなんてねーよって。
0379デフォルトの名無しさん
2008/12/11(木) 20:46:530380デフォルトの名無しさん
2008/12/12(金) 19:54:50正式発表:Visual Studio 2010がF#でシップ予定 - InfoQ
http://www.infoq.com/jp/news/2008/12/FSharp-Release
0381デフォルトの名無しさん
2008/12/12(金) 20:01:170382デフォルトの名無しさん
2008/12/12(金) 20:23:12まぁでも、Windows向けに開発するなら.NETにも触れといた方がいいとは思う。
0383デフォルトの名無しさん
2008/12/12(金) 21:48:11機能プログラミングって・・・w
0384デフォルトの名無しさん
2008/12/12(金) 22:14:330385デフォルトの名無しさん
2008/12/13(土) 10:57:24ざわ… ざわ…
0386デフォルトの名無しさん
2008/12/27(土) 00:41:54let 〜 andができないのこまらね?
0387デフォルトの名無しさん
2008/12/27(土) 06:37:350388デフォルトの名無しさん
2008/12/27(土) 12:34:30ExpertF#に以下のクラス定義があります。
type Vector2D(dx: float, dy: float) =
let len = sqrt(dx * dx + dy * dy)
member v.DX = dx
member v.DY = dy
member v.Length = len
member v.Scale(k) = Vector2D(k*dx, k*dy)
member v.ShiftX(x) = Vector2D(dx=x+dx, dy=dy) (* �@ *)
member v.ShiftY(y) = Vector2D(dx=dx, dy=y+dy) (* �A *)
�@と�Aのところで引数を指定するのにdx=x+dxのようにしてい
ますが普通にx+dxではいけないのでしょうか?こちらでも
同じように動作しました。dx=x+dxの方法には他に意味が
あるのでしょうか?
0389デフォルトの名無しさん
2008/12/27(土) 13:28:370390デフォルトの名無しさん
2008/12/27(土) 14:29:25レスどうもです。
やってみました。確かにそういう利便性がありました。
ありがとうございました。
0391デフォルトの名無しさん
2008/12/27(土) 18:52:50VSでは単独での使用が想定されてないとか
アプリケーションのコアを構築するためとか
どういう意味なのかね。想定場面がよくわからん
だいたいC#VBからF#の関数呼ぶのも一苦労なんだけど。
VSなしじゃ使い物にならなくなるってことかな
CLR上のLL的ポジションでいて欲しかったんだけどなあ
0392デフォルトの名無しさん
2008/12/28(日) 22:58:56F# にはデザイナ ツールが含まれない。
つまり、WinForm やら ASP.NET Page やらをポトペタで開発できない。
ついでにいえば型付きデータ セットも、やるならコードごりごり書くしかない。
やるならやればいいけど。やりたい?それ?やりたくないよね?
じゃそういう部分は C#/VB.NET に任せて、他のコアな部分を F# で書くといいよ。
の意。
>>386
ふつうに書けるけど。なんか別の意味か?
let rec even n =
if n = 0 then true else odd (n - 1)
and odd n =
if n = 0 then false else even (n - 1)
0393デフォルトの名無しさん
2008/12/29(月) 07:09:17ペタペタできないのか
じゃあ覚える意味あんまりないか
0394392
2008/12/29(月) 21:39:23念のため言っとくと「F# にはデザイナ ツールが含まれない」てのは VS2010 での話ね。
その次の VS とか、あるいは SP とかで、いずれは提供されるようになるものと思われ。
まあ、だとしても何年後だよって話だが。
0395デフォルトの名無しさん
2008/12/29(月) 21:48:450396デフォルトの名無しさん
2008/12/30(火) 00:05:380397デフォルトの名無しさん
2008/12/30(火) 01:21:32ごめんこれ釣りなのかどうかわからなくなってきたw
0398デフォルトの名無しさん
2008/12/30(火) 01:39:420399デフォルトの名無しさん
2008/12/30(火) 01:40:25ごめんこれ釣りなのかどうかわからなくなってきたw
0400デフォルトの名無しさん
2008/12/30(火) 02:53:51普通にかけないんだけどなにが普通なんだ?
let x = 2 and y = 1;;
どういう仕様なんだと思ったけどandの前に改行がいるんだな
0401デフォルトの名無しさん
2009/01/04(日) 21:03:52let f a b c =
match a, b, c with
| Some a, Some b, Some c -> Some (a, b, c)
| _ -> None
と定義して、以下を実行すると value restriction と言われて結果が None に
ならない。
f (Some 3) None (Some 1.5)
分かる人いる?
そもそもvalue restrictionとは何なのか。
0402デフォルトの名無しさん
2009/01/05(月) 22:53:07天才じゃないが答えてみる
関数 f の型は
val f : 'a option -> 'b option -> 'c option -> ('a * 'b * 'c) option
になるわけだけど
f (Some 3) None (Some 1.5)
という式を評価しても 'b の型は最後まで確定しないわな
それはよろしくない(→というのが超大雑把な value restriction の説明)
つまり 'b の型を明らかにすれば error を消せる
簡単には適当な型注釈をつけてやれば OK で
f (Some 3) (None : int) (Some 1.5)
とか、あるいは
(f (Some 3) None (Some 1.5) : (int * int * float) option)
とかすればよい
しかし通常は文脈から 'b が具体的な型に決まることが多い
if true then f (Some 3) None (Some 1.5) else f None (Some 1) None
だもんで型注釈に頼るような場面は少ないように思われる
0403デフォルトの名無しさん
2009/01/06(火) 03:16:50なるほど。理解できた。
(None : int)は(None : int option)の誤記だと
思うけど後者でうまくいった。全体に型注釈
をつけても良いんだね。thx。
0404デフォルトの名無しさん
2009/01/17(土) 14:45:280405デフォルトの名無しさん
2009/01/23(金) 17:21:260406デフォルトの名無しさん
2009/01/31(土) 17:52:20ライブラリの管理などを含めてノウハウを教えてください。
エディタはこれを使えとか、コンパイルするときはこうしろとか、成果物を配布するときはこうしろとか、
そういう諸々のプログラミング周辺の雑務について知りたいです。
0407デフォルトの名無しさん
2009/01/31(土) 22:54:46けっこう他の言語はバリバリ使いこなしてるヤツに限ってそういうこと言う
なんかコードも書いてないのにわかんね言ってるように見えるんだけど
Web でかるーく拾いあさった断片的な知識並べてわかんない言われてもねえ
ほなたとえば OOP べんきょーするときもそんなやり方でやったんかと
『やさしい Java』読んだだけで Java できますゆー人間信用すんのかと
実践皆無の人間が OOP 知ってますゆーのを見てなんとも思わんのかと
もうね、自分の知らん新しいテクノロジ排除したいだけのオッサンちゃうんかと
プログラマ名乗るんならまずやってみろよと
知りたいのなら知る努力をしてみせろよと
その上でどこがどーゆー風にわからんのか言えと
0408デフォルトの名無しさん
2009/01/31(土) 22:57:090409デフォルトの名無しさん
2009/01/31(土) 22:57:51精々逃げ切れるようにがんばれよと言っておきたい
0410デフォルトの名無しさん
2009/01/31(土) 23:08:58言いたいことはわからないでもない
でも F# に限っていうなら使い分ければいいんでないの?
関数型と命令型と OOP と
0411デフォルトの名無しさん
2009/02/01(日) 13:50:33APIを順に呼んでエラーチェックだけするようなプログラムばっか
書いている(書かされている)人には、勉強しようというモチベーションなど
湧かんだろうなー。
0412デフォルトの名無しさん
2009/02/01(日) 22:26:240413デフォルトの名無しさん
2009/02/01(日) 23:08:23職業プログラマの多くがそれに該当するのではないかと想像するが
それが仕事なんだから許してやってくれ
職業プログラマの世界では、そもそも「車輪の再生産」は悪とされている
自分でコードを書かなければ工数が減るしバグをつくりこむ機会もなくなるからな
0414デフォルトの名無しさん
2009/02/01(日) 23:09:590415デフォルトの名無しさん
2009/02/01(日) 23:28:05自力でtreeのトラバース程度もやる必要に迫られたことも無く、
2分探査のコードを書けと言われてバグ無く書けないこと位、みんな判ってるさ。
そして、F#を勉強する俺出世確実、とか思ってるやつもきっといない。
0416デフォルトの名無しさん
2009/02/02(月) 00:08:16でも他人がもう作っちゃったプログラムを同じように作ったってしょうがないだろ。
その労力を新しいものを作る事に傾けたほうが効率的だし、
自分が作るということは作ったものに責任を取るということなんだから、
そんな余計な事まで首突っ込んで余計な責任を取ることも無いだろ。
0417デフォルトの名無しさん
2009/02/02(月) 00:27:17もちろん既存のオープンソースなどを使った方がいいのもわかるが、その仕様を自分の要望に合わせる時に無理があることも多いから。
自分で作るのも追っついてるうちはいいが本当に全てを作るわけにもいかずどこまで突き詰め、どこで妥協するのか考える毎日だが。
0418デフォルトの名無しさん
2009/02/02(月) 22:11:53出来合いの API とかじゃ "想定された使い方" しかできん罠
なんかインジェクションしたいってなったらもう自分で組むっきゃないわけで
そんなときにクラスじゃ粒度がデカすぎるって場合も多いんだよね
はばからずに高階のノリでイケるってホント楽(柔軟)でいい
0419デフォルトの名無しさん
2009/02/03(火) 00:09:39> 職業プログラマの世界では、そもそも「車輪の再生産」は悪とされている
むしろどんどん再生産して儲けてくださいそれが職業プログラマの本分です
0420デフォルトの名無しさん
2009/02/03(火) 01:16:29俺 一流だから そんなこと しない
0421デフォルトの名無しさん
2009/02/03(火) 03:02:26「再生産」で儲けることのなにが三流なのか、答えてもらおうじゃないかw
0422デフォルトの名無しさん
2009/02/03(火) 12:02:300423デフォルトの名無しさん
2009/02/03(火) 12:13:330424デフォルトの名無しさん
2009/02/03(火) 12:34:51俺にできないような、新しい事を追い続けてくれよww
続きはマ板で
0425デフォルトの名無しさん
2009/02/03(火) 21:09:42×車輪の再生産
○車輪の再発明
0426デフォルトの名無しさん
2009/02/07(土) 11:05:470427デフォルトの名無しさん
2009/02/07(土) 23:47:23型からは関数とわかっていても、関数のようには呼び出せませんでした。
以下のようなことを実現するのは難しいのでしょうか?
type FUNC<'arg1,'result> = F of ('arg1 -> 'result);;
F ((+)1);; //使用例1
F (+);; //使用例2
//ここでエラー
let apply1 (f:FUNC<int,int>) = f 1;;
//apply1 ((+)1)、などとしたい
欲を言えば、FUNC型からarg1やresultの型を取り出すような
プログラムも書きたい・・
0428デフォルトの名無しさん
2009/02/08(日) 00:47:21というか、なんかいろいろ勘違いしてそうに見える
> apply1 ((+)1)、などとしたい
で、一体なにをしたいの?その式を評価して得るものはなに?
まずはその式の「型」を教えてくれないとなんともアドバイスできない
いちおーエスパーしとくとこんなんか?
let apply1 f x = f x
let f = apply1 ((+) 1)
f 2 // val it : int = 3
もしなにか Union Types を使わにゃならんような
理由があるんだったなら教えてほしい
0429デフォルトの名無しさん
2009/02/08(日) 02:00:06おっしゃるとおり、自分でもたぶん型と関数の違いがあまりわかってないと思います^^;
上の質問をした経緯です
最終的にやりたいことは、let recを用いずにYコンビネータを書きたい
しかし、F#では、次のような呼び出しは型情報が∞ループして決定できない
let fact self n = if n=1 then 1 else n * ((self self) (n-1)) in fact fact 10;;
そこで、まずは、再帰的なデータ型を定義して用い、上記のような呼び出しを通るようにしたい
(再帰的に'aを'a->'bに置き換えるような型)
しかし、再帰的なデータ型とか、あまりプログラミング経験がないので
型情報を扱うプログラムからまず取り組むことにしたが、つまづいた、とう状況です
上のプログラムですが、次のようにするとコンパイルは通ります。
let apply1 f:FUNC<int,int> = f 1;;
val apply1 : (int -> FUNC<int,int>) -> FUNC<int,int>
しかし、自分が求めた型は
val apply1 : FUNC<int,int> -> int
なのですが、なぜこうなるのかはさっぱりわかってません
0430デフォルトの名無しさん
2009/02/08(日) 08:51:24私には内容がさっぱり理解できないので、参考になるかどうかは分からんが
ttp://www.kurims.kyoto-u.ac.jp/~hassei/selfref2006.pdf
0431デフォルトの名無しさん
2009/02/08(日) 09:55:54let apply1 = function (F f) -> f 1;;
0432デフォルトの名無しさん
2009/02/08(日) 11:15:40let apply1 (F f) = f 1;;
0433デフォルトの名無しさん
2009/02/08(日) 13:03:49ありがとう。とても参考になりました。
let recは言語組み込みのYコンビネータみたいなもんらしいですね
無事できあがったYコンビネータ
type X = Psi_inv of (X -> (int -> int));;
let psi (Psi_inv f) = f;;
let Y g =
let h y = g(fun x -> (((psi y) y) x)) in
h(Psi_inv(h));;
(Y (fun f x -> if x=0 then 1 else x * f(x - 1))) 10;;
しかし、単純にF#に翻訳しただけなので
理解したとは言い難い・・
0434デフォルトの名無しさん
2009/02/08(日) 18:21:09type fix<'a, 'b> =
Fix of (fix<'a, 'b> -> ('a -> 'b))
let y f =
(fun (Fix g as h) x -> f (g h) x) (Fix (fun (Fix g as h) x -> f (g h) x))
y (fun f x -> if x = 1 then 1 else x * f (x-1)) 5
// val it : int = 120
[1..10] |> List.map (y (fun f x -> if x <= 2 then 1 else f (x-1) + f (x-2)))
// val it : int list = [1; 1; 2; 3; 5; 8; 13; 21; 34; 55]
0435デフォルトの名無しさん
2009/02/08(日) 20:43:02type Rec<'a,'b> = R of (Rec<'a,'b> -> ('a -> 'b));;
//version1
let y f =
let ymaker (R proc) = f(fun arg -> (proc (R proc)) arg) in
ymaker (R ymaker);;
//version1 extract
let y f =
(fun (R proc) -> f(fun arg -> (proc (R proc)) arg))
(R
(fun (R proc) -> f(fun arg -> (proc (R proc)) arg))
);;
//version 2
let R_inv (R f) = f;;
let y f =
let ymaker proc = f(fun arg -> (((R_inv proc) proc) arg)) in
ymaker (R ymaker);;
//version 2 extract
let y f =
(fun proc -> f(fun arg -> (((R_inv proc) proc) arg)))
(R
(fun proc -> f(fun arg -> (((R_inv proc) proc) arg)))
);;
0436デフォルトの名無しさん
2009/02/10(火) 07:30:35By Chris Smith
Rough Cuts Release: February 2009
Print Book Release: October 2009
Pages: 504
俺、この本が出たらF#はじめるんだ・・・
0437デフォルトの名無しさん
2009/02/11(水) 02:31:18「左辺値」「右辺値」という言葉に
妙な違和感を覚えだす
そもそもそんな観念がないというか
あえて言うなら左辺に値などない
てなことを妄想してみたけどどうよ?
0438デフォルトの名無しさん
2009/02/11(水) 04:31:13概念じゃねーの?
0439デフォルトの名無しさん
2009/02/11(水) 08:56:56lazyに考えれば、もっとシンプルに書けるんじゃね(´・ω・`)?
let rec fix (f : Lazy<_>) = f.Force() (lazy fix f)
let fact = fix <| lazy fun f x -> if x = 0 then 1 else x * f.Force() (x - 1)
do fact 5 |> printfn "%d"
0440デフォルトの名無しさん
2009/02/11(水) 09:01:08「let x = 1」
これは等式とは思わない方が自然じゃないだろうか。
もともとは数学の論文とかでよく出てくる
「Let x := 1.(xを1と置く。)」とかいう表記を構文にしただけなんじゃないかと想像する。
等式じゃないなら、左辺、右辺とかいう観念はない。
0441デフォルトの名無しさん
2009/02/11(水) 09:18:390442デフォルトの名無しさん
2009/02/11(水) 12:21:03>>429 をよく見ろ
> 最終的にやりたいことは、let recを用いずにYコンビネータを書きたい
0443デフォルトの名無しさん
2009/02/11(水) 12:55:37let rec fix f x = f (fix f) x
let fact = fix <| fun f x -> if x = 0 then 1 else x * f (x - 1)
0444デフォルトの名無しさん
2009/02/11(水) 13:39:14> let rec fix f x = f (fix f) x
あー、そっか。x つければ落ちないんだ。(´・ω・`)
let rec fix f = f (fix f)
と書いて、StackOverflowになってたのでlazyにしてた。
0445デフォルトの名無しさん
2009/02/11(水) 13:47:41> let rec fix f = f (fix f);;
val fix : ('a -> 'a) -> 'a
> let rec fix f x = f (fix f) x;;
val fix : (('a -> 'b) -> 'a -> 'b) -> 'a -> 'b
0446デフォルトの名無しさん
2009/02/11(水) 14:01:31正格評価がどうのこうので。
試してないが、確かこれでもいけたはず
let rec y f = f (fun x -> y f x);;
fun arg -> (proc (R proc)) argの箇所を
(proc (R proc))としないのも同じ理由だと思う
とりあえずfunで包めばOK,みたいな
0447デフォルトの名無しさん
2009/02/11(水) 14:31:19type Fix<'a, 'b> = Fix of (Fix<'a, 'b> -> 'a -> 'b)
let run_fix (Fix f) = f
let ycomb f =
let g proc = f (fun arg -> run_fix proc proc arg) in
g (Fix g)
let fact = ycomb <| fun f n -> if n = 0 then 1 else n * f (n - 1)
0448デフォルトの名無しさん
2009/02/11(水) 14:42:02正直、「観念」と「概念」の違いがわからんで調べてきた
どちらも「モノコトに対する意識・考え」だが…
* 観念
英語でいう idea の意味に近い
オレオレ解釈的(主観的)
故に観念は多様である
* 概念
英語でいう concept の意味に近い
ふつうはみんなそう解釈するよねー的(客観的)
故に概念は一様である
という違いがあるようだ。
左辺値、右辺値という考え方は、一般に共通の理解を得ている
もの(通念)であり、それらは「概念」と呼ぶのが相応しい
ということかな?
0449デフォルトの名無しさん
2009/02/11(水) 14:45:18まあニュアンスが伝わればいいんじゃね?
0450デフォルトの名無しさん
2009/02/12(木) 07:21:21冗長なんじゃなくて、正格評価の世界では意味が全く別のものになる。
let rec fix = fun f -> f (fix f)
let rec fix = fun f -> fun x -> f (fix f) x
後者では x が遅延の役割をしてくれる。
Haskellのような遅延評価の世界では、確かに冗長なだけ。
0451デフォルトの名無しさん
2009/02/12(木) 07:31:11引数 x を追加して遅延の役割をしてもらう(>>443)のと、
どちらがコードの見た目的にやさしいかは明らか。w
0452デフォルトの名無しさん
2009/02/13(金) 07:47:47んー、マジで分からん
0453デフォルトの名無しさん
2009/02/13(金) 19:50:03f (fix f)
↓
f (f (fix f))
↓
f (f (f (fix f)))
↓
f (f (f (f (fix f))))
↓
f (f (f (f (f (fix f)))))
↓
あぼーん
関数を返そうとはするが、fix を展開しようとして無限ループ。
let rec fix f = fun x -> f (fix f) x だと、f が渡されても、
fun x -> f (fix f) x
x が渡されるまで fix は展開されない。
0454デフォルトの名無しさん
2009/02/13(金) 19:54:11× 関数を返そうとはするが、fix を展開しようとして無限ループ。
○ 関数を返そうとはするが、先に fix を展開してしまい無限ループ。
× x が渡されるまで fix は展開されない。
○ 先に関数を返し、x が渡されるまで fix は展開されない。
0455デフォルトの名無しさん
2009/02/14(土) 17:13:10関数 = 値 ではない、と
――ここで正格評価において
let rec fix f = f (fix f) なる定義で fix g を評価しようとしたら?
必死こいて値を算出しようとしてしまうんだな
で、その結果、>>453 が示すように無限ループに陥る
let rec fix f x = f (fix f) x なる定義で fix g を評価しようとしたら?
これは部分適用だから関数オブジェクトの生成を行うのだな
で、後々、(fix g) y とされたときに値の算出が始まる
0456デフォルトの名無しさん
2009/02/15(日) 23:01:31入れ子になった型宣言(ネストされた type)って無理?
type a () =
type b = {x : int; y : int;}
...
とかすると、2つ目の type で
Unexpected keyword 'type' in type definition
と怒られる
0457デフォルトの名無しさん
2009/02/17(火) 20:14:16できなさげ
確かに C# ではインナー クラスできるけど
Java と違ってそんなに多用されるもんでもないような
てか例示のコードならタプルでいいんじゃ?
0458デフォルトの名無しさん
2009/02/17(火) 22:01:21まぁ、確かにタプルでも機能するんですが、
各要素へのアクセスが面倒なんで
レコードの方が扱いやすいなぁと。
0459デフォルトの名無しさん
2009/02/18(水) 01:02:15F# は OCaml ベースなんだぜ?
internal すらぬるい、どうしても外部から隠蔽したいというなら
シグネチャ(.fsi)ファイルを書けばいいじゃないか
と、眠たいので調べもせずにいってみるテスト
0460デフォルトの名無しさん
2009/02/18(水) 12:53:16公開するものだけをシグネチャ ファイルにしたら上手くいった。
なるほど、fsi はこうやって使うのか。
改めて読み直してみたら本には書かれていたけど、
いままで自分には無関係だと思って無視してた。
もうちょっと調べてみる。
じつは OCaml は見たことも触ったこともないんだけど、
やっぱ一通り触れてみた方がいいのかな・・・
0461デフォルトの名無しさん
2009/02/18(水) 20:18:22言い忘れてた
ありがと
0462デフォルトの名無しさん
2009/03/04(水) 22:31:36パラメータを int 型に制約しなければ例えば次のように出来ました。
type System.Collections.Generic.IEnumerable with
member this.H = Seq.hd this
これを seq<int> 型の時のみ拡張することは出来ないのでしょうか。
0463デフォルトの名無しさん
2009/03/07(土) 03:49:180464デフォルトの名無しさん
2009/03/07(土) 04:09:35男は度胸。ものは試し。
まずはインストールしてミソ。
0465デフォルトの名無しさん
2009/03/07(土) 09:32:332008 Pro安く売ってないのかね
0466デフォルトの名無しさん
2009/03/07(土) 13:05:24http://www.microsoft.com/japan/msdn/vstudio/products/vs08/compare.aspx
相変わらず Visual Studio 2008 Shell は知られてないなと
http://msdn.microsoft.com/ja-jp/vsx2008/products/bb933751.aspx
アドインなんだから devenv.exe のあるなしで判断できるだろうと
0467デフォルトの名無しさん
2009/03/07(土) 17:19:53Scala がどうとか言ってる同僚を黙らせたい
…俺? 日本語の本が出てからやるわw
0468デフォルトの名無しさん
2009/03/07(土) 23:49:030469デフォルトの名無しさん
2009/03/07(土) 23:56:450470デフォルトの名無しさん
2009/03/08(日) 00:07:37どうとか言ってる内容にもよるわけだが、黙らせる方法ってのは。
関数型サイコーとでも言っているのかい?その同僚は。
0471デフォルトの名無しさん
2009/03/08(日) 02:04:510472デフォルトの名無しさん
2009/03/08(日) 15:24:28kwsk
2008 StdあればF#の拡張機能は組み込めるってこと?
あと、VS2008 の Shell 版なら本体買う必要なすってことなのかな?
0473472
2009/03/08(日) 15:31:46大体あってた。
いげ太のブログ: Microsoft Visual Studio 2008 Shell (integrated mode) で F# 無償開発環境
http://igeta.cocolog-nifty.com/blog/2008/04/vsshell.html
> Microsoft Visual Studio 2008 Shell (integrated mode) を導入すれば、
> 無償の F# 開発環境が手に入る。噛み砕いて言えば、C# も VB.NET も C++/CLI も、
> 何の言語もバンドルされていない Visual Studio 2008 が、タダで手に入るってことだ。
> そして、VSShell がインストールされた状態で、F# をインストールすればよい。
> そうすれば VSShell に F# が組み込まれるのだ。
Visual Studio で F#の開発を行う - ピコピコの日記
http://d.hatena.ne.jp/net-k/20080911/1221099444
> F#はVisual Studio 2008 もしくは、Visual Studio 2008 Shellから利用することができる。
> Visual Studio 2008 を持っていないので、無償で公開されているVisual Studio 2008 Shellをダウンロードした。
> ちなみに、Visual Studio 2008 Shell とは、C++やC#などの開発環境が何も入っていない状態のVisual Studio 2008で、
> Visual Studio向けの開発環境をSDKを使って組み込むことができる。
Visual Studio Shellダウンロードしてくるわ。
ありがとう。
0474デフォルトの名無しさん
2009/03/09(月) 22:36:42http://d.hatena.ne.jp/camlspotter/
いろいろ挑発的なことが書いてあるな
0475デフォルトの名無しさん
2009/03/22(日) 17:40:500476デフォルトの名無しさん
2009/03/24(火) 16:39:370477デフォルトの名無しさん
2009/03/24(火) 20:11:440478デフォルトの名無しさん
2009/04/15(水) 07:26:41ttp://www.langnetsymposium.com/2009/speakers.aspx
0479デフォルトの名無しさん
2009/04/15(水) 07:36:20Common Compiler Infrastructure - Metadata
ttp://ccimetadata.codeplex.com/
Common Compiler Infrastructure: Code and ASTcomponents
ttp://cciast.codeplex.com/
Common Compiler Infrastructure: Sample applications
ttp://ccisamples.codeplex.com/
0480デフォルトの名無しさん
2009/04/15(水) 19:35:17Democratizing The Cloud Using the LiveLabs Reactive Framework
ttp://en.oreilly.com/oscon2009/public/schedule/detail/9093
0481デフォルトの名無しさん
2009/04/15(水) 20:48:26なにこれ?
やさしい人(かしこい人)おしえてくれろ。
0482デフォルトの名無しさん
2009/04/16(木) 06:12:26MS Researchで昔から使われてる、.NETでのコンパイラ実装のための共通基盤です。
少なくとも2002年には存在してます。
ttp://www.inf.ethz.ch/personal/zueff/Presentations/dotNET%20ONE%202002.pdf
今ごろソース公開をはじめたということは、「Compiler as a Service」に向けての一歩ということじゃろか(´・ω・`)?
0483デフォルトの名無しさん
2009/04/16(木) 06:19:370484デフォルトの名無しさん
2009/04/16(木) 18:01:22jay for C#とかと違って共通的なライブラリにするってわけだよね?
0485デフォルトの名無しさん
2009/04/16(木) 19:03:16http://japan.internet.com/developer/20061025/26.html
0486デフォルトの名無しさん
2009/04/16(木) 19:37:360487sage
2009/04/18(土) 00:39:140488デフォルトの名無しさん
2009/04/18(土) 07:04:45ttp://www.langnetsymposium.com/2009/talks.aspx
0489デフォルトの名無しさん
2009/04/18(土) 17:42:21comonadicなアプローチになるということじゃろか(´・ω・`)?
comonadとFRPの関係に言及してる人なんて、世界で数えるほどしか見つかりませんが・・・。
0490デフォルトの名無しさん
2009/04/19(日) 15:14:55interface IObservable<T> {
IDisposable Regsiter(IObserver<T> o);
}
interface IObserver<T> {
void OnUpdate(T value);
}
class Observable<T> : IObservable<T> {
IList<IObserver<T>> observers = new List<IObserver<T>>();
public IDisposable Regsiter(IObserver<T> o) {
observers.Add(o);
return new Disposer(() => { observers.Remove(o); });
}
public void FireUpdate(T value) {
foreach (var o in observers) {
o.OnUpdate(value);
}
}
}
0491デフォルトの名無しさん
2009/04/19(日) 15:15:53class Disposer : IDisposable {
Action dispose;
public Disposer(Action dispose) {
this.dispose = dispose;
}
public void Dispose() {
dispose();
}
}
class Observer<T> : IObserver<T> {
Action<T> update;
public Observer(Action<T> update) {
this.update = update;
}
public void OnUpdate(T value) {
update(value);
}
}
0492デフォルトの名無しさん
2009/04/19(日) 15:16:55static class Linq {
public static IObservable<U> Select<T, U>(this IObservable<T> obs, Func<T, U> func) {
var ret = new Observable<U>();
obs.Regsiter(new Observer<T>(t => { ret.FireUpdate(func(t)); }));
return ret;
}
public static IObservable<T> Where<T>(this IObservable<T> obs, Func<T, bool> pred) {
var ret = new Observable<T>();
obs.Regsiter(new Observer<T>(t => { if (pred(t)) ret.FireUpdate(t); }));
return ret;
}
}
class ObservableCollection<T> : Observable<T> {
IList<T> list = new List<T>();
public void Add(T value) {
list.Add(value);
FireUpdate(value);
}
}
0493デフォルトの名無しさん
2009/04/19(日) 15:18:09static class Test {
static void Main() {
var list = new ObservableCollection<int>();
//list.Regsiter(new Observer<int>(n => { Console.WriteLine(n); }));
var obs =
from n in list
where n > 2
select n + " が追加されますた";
using (obs.Regsiter(new Observer<string>(s => { Console.WriteLine(s); }))) {
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
list.Add(5);
}
list.Add(6);
list.Add(7);
list.Add(8);
Console.ReadLine();
}
}
// 実行結果
3 が追加されますた
4 が追加されますた
5 が追加されますた
0494デフォルトの名無しさん
2009/04/19(日) 20:59:45上のコードは何となくC#に見えるのですが・・・
まあ、F#まだ良く知らない私が言っても説得力無いですね^^;
ええと、質問です。
F#がVS2010に正式採用されるそうですが、そうなったらF#入門書がそれなりに出ると思いますでしょうか?
さらには関数型言語のシェア(?)が今よりもっと広がると思いますでしょうか?
(つまり、他の関数型言語の入門書も増えますか?w)←実はこっちが私の願望
0495デフォルトの名無しさん
2009/04/19(日) 21:01:090496デフォルトの名無しさん
2009/04/19(日) 21:22:130497デフォルトの名無しさん
2009/04/19(日) 22:10:31別擦れたてろ。
0498デフォルトの名無しさん
2009/04/19(日) 22:55:05http://pc12.2ch.net/test/read.cgi/tech/1202568694/
0499デフォルトの名無しさん
2009/04/19(日) 23:09:11私も期待してます。
「F# for Scientists」の様な面白い本が
日本でも生まれるといいな。
0500デフォルトの名無しさん
2009/04/19(日) 23:55:19どんな内容なの?
050110
2009/04/20(月) 12:54:44「Expert F#」と重なる部分も一部あるけど、
ライブラリの使い方や .NET 系としての使い方というよりも
関数型言語としての使い方の解説が多い。
たとえば、memorize を関数型で実現するテクニックはなるほどと思った。
最適化についても、高位のアルゴリズム的なものや、
もっと低位の最適化も一章まるまる割いて解説されてる。
(といっても、わずか24ページだけど)
Managed DirectX (Direct3D) の扱い方も載ってた。
しかも、クラスを作ってメソッドを作ってという
C# などの一般的な作りじゃなくて、
高階関数を連ねていく関数型言語っぽい作り。
シーングラフはバリアント型によるツリー構造のいい実例になってる。
ただ、CTP がリリースされる前に執筆した本なので、
今は推奨されていない古い書き方が一部ちらほらある。
(コンパイラが指摘してくれるから、簡単に直せるが)
同じ理由で Units of Measure などの新機能も扱っていない。
また、CTP 以前の文法も全てを網羅しているわけではなく、
例えばアクティブ パターンなどは扱っていない。
それでも、「Foundations of F#」の後に読むには
なかなかいい本になってる。
0502デフォルトの名無しさん
2009/04/20(月) 12:56:13前に同じ板の 「課題」 にレスしてたので・・・
0503デフォルトの名無しさん
2009/04/20(月) 15:46:41http://www.lsharp.org/
0504デフォルトの名無しさん
2009/04/20(月) 19:54:410505デフォルトの名無しさん
2009/04/20(月) 20:14:01という以上の何ができるのか、紹介されたページからは分からん。
0506500
2009/04/20(月) 21:18:09詳細どうもです。DirectX にまで触れてるんですね。
2 冊目以降に読む本、みたいなイメージでしょうか。
国内では入門本すらまだの段階ですし
コイツと同じような内容のものとなると
…さていつ出るやらですなあ。
0507デフォルトの名無しさん
2009/04/20(月) 23:41:520508デフォルトの名無しさん
2009/04/21(火) 21:22:06可変長引数のまねごとをしてみたいんだけど、
どういう仕組みになってるのかよく分からないです。
単純に次のようにはできないですよね。
let f n =
if n = 0 then (fun () -> ())
else (fun a -> printfn "%d" a)
F# のソースから printf => fprintf => ... => gprintf
と追ってみたけどよく分からないです。
単純な1引数と2引数を選択出来るようなサンプルを
誰か作ってくれませんか。
0509デフォルトの名無しさん
2009/04/21(火) 22:15:17>
> /// Parse "printf-style" format specifiers at compile time, producing
> /// a list of items that specify the types of the things that follow.
ParseFormatString で grep するとしあわせになれるかも。
0510デフォルトの名無しさん
2009/04/21(火) 22:29:12ありがと。
grep してみたが、まだ幸せにはなれない。
ちょっと解析してみます。
0511デフォルトの名無しさん
2009/04/22(水) 20:14:28これなんか面白そうです。
Real World Functional Programming: With Examples in F# and C#
http://www.amazon.co.jp/dp/1933988924/
著者のブログ
http://tomasp.net/blog/functional-programming-book.aspx
7月発売なんで、まだまだ先だけど
0512デフォルトの名無しさん
2009/04/23(木) 00:12:51早読みバージョン読んでるけど、関数型初めての自分には色々関数型での開発の利点とかを細かく説明してくれてるのでよいわぁ
0513デフォルトの名無しさん
2009/04/25(土) 13:23:19The Definitive Guide to F#
http://www.apress.com/book/view/9781430224310
0514デフォルトの名無しさん
2009/04/26(日) 12:24:48アクティブパターンは扱ってました。
ただし、他のトピックほど詳しくはないです。
半ページほどの紹介と、XML の解析を例にした
1ページ強ほどの実例だけです。
私自身、未だに使い方がよく分かりません。
他に、こんな事に役立つよとかいう例はないですかね。
「いげ太のブログ」をみても、使い所が想像できなくて。
http://igeta.cocolog-nifty.com/blog/2008/04/actpattern2.html#more
0515デフォルトの名無しさん
2009/04/27(月) 01:40:24let multiply n1 n2=n1*n2
printf ("%f")( multiply 1.0 2.0)
printf ("%d")( multiply 3 4)
でなんで3行目にfloat is not compatible...とかいわれるの?
0516デフォルトの名無しさん
2009/04/27(月) 07:40:31ヒント:
2、3行目をコメントアウトして1行目の multiply 関数の型をみてみる
次に3行目だけをコメントアウトして multiply 関数の型をみてみる
最後に全てのコメントを外し、2行目と3行目を入れ替えて multiply 関数の型をみてみる
0517デフォルトの名無しさん
2009/04/27(月) 11:13:432,3行目を逆にすると後の行がエラーになるのはわかります。
F#の型推論の場合、2行目で型が決定されてしまった時点でほかのものはそれに従わないといけないと言うこと?
これがC#のgenericsだったら(まぁそもそも*とかで書けませんが)2行目も3行目も各々の型に展開されてコンパイルされると思うんですが。
あぁかいてておもったがa'とかつかえばよいということ?
0518デフォルトの名無しさん
2009/04/27(月) 12:05:27もともとのOCamlでは演算子も別だしね。 *. とか。
0519デフォルトの名無しさん
2009/04/27(月) 12:13:22let compute f n1 n2 = f n1 n2
printfn "%f" (compute ( * ) 1.0 2.0)
printfn "%d" (compute ( * ) 3 4)
;;
0520デフォルトの名無しさん
2009/04/28(火) 05:36:55let inline multiply n1 n2=n1*n2
printfn ("%f")( multiply 1.0 2.0)
printfn ("%d")( multiply 3 4)
;;
(実行結果)
val inline multiply :
^a -> ^b -> ^c when ( ^a or ^b) : (static member ( * ) : ^a * ^b -> ^c)
2.000000
12
0521516
2009/04/28(火) 08:42:13演算子の問題あるから、例に書いたのはそのまま通らないとして、
inlineをつけないと最初の奴を書いた時点でそのコンパイルスコープ?でコンパイルされる時の型が一意に決まってしまうため後の行のものはエラーになる。
inline付ければ各々に対して展開されるため大丈夫。
a'とかつかえば、どの型でも通るようになる。
ということでおけー?
0522デフォルトの名無しさん
2009/04/28(火) 09:37:150523デフォルトの名無しさん
2009/04/29(水) 00:39:530524デフォルトの名無しさん
2009/04/29(水) 00:52:59static head-type type variableっていうのか ^ω^
0525デフォルトの名無しさん
2009/04/29(水) 15:05:280526デフォルトの名無しさん
2009/04/29(水) 16:06:490527デフォルトの名無しさん
2009/04/30(木) 09:08:060528デフォルトの名無しさん
2009/04/30(木) 18:57:08let plus = generic (+) | (+.)
F#版もstaticなメンバ関数が定義されていなければならないのは同じだから
これと同じ機能っぽい気がする
0529527
2009/04/30(木) 20:30:00useがusingと似たような機能を持っているようです
0530デフォルトの名無しさん
2009/05/09(土) 20:29:06http://fsharpnews.blogspot.com/
[Monday, 4 May 2009] Re: Microsoft canning F#
The next release, beta 1, is due out this month
and a beta 2 is scheduled for release before the full 2010 release next year.
0531デフォルトの名無しさん
2009/05/09(土) 20:43:310532デフォルトの名無しさん
2009/05/12(火) 00:32:43OOPを駆使しなければなんとかなるんじゃね
クラスまわりは構文かわりそう…
0533デフォルトの名無しさん
2009/05/12(火) 00:40:39まあ、一部ならいいんじゃね?
言語混在できるのが.NET Frameworkの強みだし。
0534531
2009/05/12(火) 00:46:09構文の変更とかはいいんだけど、作り込んでったあとにあるときだけ挙動がおかしいとかわけわからんバグが出るのが怖いです・・・
>533
ごもっともだす。どうせC#と混在になるのは目に見えてるからなぁ
0535デフォルトの名無しさん
2009/05/12(火) 07:39:39何が修正されたのか、機能はどうか、
情報が出てきても良い頃なんだが・・・
まだどこにも無いな
0536デフォルトの名無しさん
2009/05/26(火) 22:36:440537デフォルトの名無しさん
2009/05/27(水) 00:47:370538デフォルトの名無しさん
2009/05/27(水) 21:41:420539デフォルトの名無しさん
2009/05/28(木) 20:04:43fold_left -> fold
fold_right -> foldBack
ここに来てスタイル変えるか…
OCamlの小文字アンダースコア区切りはすっきりして好きだったんだがなぁ
0540デフォルトの名無しさん
2009/05/28(木) 21:40:53まあ アンダースコア区切り→キャメル はわからんでもない
しかし right を back はないわー
fold_right を foldBack と呼ぶような言語は聞いたことないんだが
どこ由来なのかねえ?
0541デフォルトの名無しさん
2009/05/29(金) 01:40:440542デフォルトの名無しさん
2009/05/29(金) 06:41:50マジ?そりゃないわ。
畳み込みって、右からとか左からっていうのが一般的な用語
だと思う。
0543デフォルトの名無しさん
2009/05/29(金) 09:13:33あれ多相ヴァリアントは?
さてOCamlに戻るか
0544デフォルトの名無しさん
2009/05/29(金) 12:15:240545デフォルトの名無しさん
2009/05/29(金) 16:01:45そういうリクエストしてみるかな
どうせβ2まであと1年あるし
0546デフォルトの名無しさん
2009/05/29(金) 20:20:200547デフォルトの名無しさん
2009/05/29(金) 23:51:41実はあるんだが.NET1.1向け
Haskellもそうだな
.NET1.1の時に.NET向け関数型言語コンパイラが多数存在したのは
C#やF#に取り込むために関数型言語の実装を研究した残骸なのかもな
OCamlはライブラリ不足な上にLinux以外のOSで動かないライブラリもいくつかあるし(win以外も含め)
不満は色々あるが今更OCamlには戻れん…
0548デフォルトの名無しさん
2009/05/30(土) 01:03:20キャメル→関数
パスカル→メソッド
てことではないかと
0549デフォルトの名無しさん
2009/05/31(日) 11:04:57いいじゃん。
そもそも左から右が正で右から左が逆っていう考え方はヨーロッパ的で日本とは逆なんだから、
右とか左とかいうのが消えたのは喜ばしい。データには右左関係ないからな。
0550デフォルトの名無しさん
2009/06/01(月) 13:42:23古くからある抽象概念の名前を、突然、別の抽象的な言葉に置き換えるのなら、
もっと強い根拠がほしいと思う。もしあったら教えてください。
0551デフォルトの名無しさん
2009/06/01(月) 21:58:52初心者からするとそれほど違和感ない。
0552デフォルトの名無しさん
2009/06/01(月) 22:00:46.NET対応になってるのは別としてOCamlにあったナイスな機能がF#ではなくなってるとかあったら教えてたもれ
0553デフォルトの名無しさん
2009/06/01(月) 22:32:37OCamlのみ
多相ヴァリアント、ファンクタ、注釈ありで型がつく箇所では省略しても必ず型推論できる性質
Camlp4/5、ビルド関係のツール(F#はしょぼい)
オブジェクト指向部分は根本的に違う(nominal/structural)
0554デフォルトの名無しさん
2009/06/02(火) 00:00:58そのへんがあるとどんなにナイスか3行で頼む・・・
0555540
2009/06/02(火) 00:13:32「fold_left or fold_right」より「fold or foldBack」の方が、
なんとなーく、ふつうは fold 使えよ的雰囲気をかもせるような
気はするんだよね
array はいざしらず、seq や list では処理効率が違ってくるから、
それをやんわりと臭わせるのは好ましいことなんだとは思う
まあやっぱりただ、他言語では left か right かで統一されているものを
わざわざ無視してまで改良すべきものなのかなー?という感は拭えない
>>550 も言うように、伝統を変えるにはもっと強い根拠がほしいなあ
「これだから MS は!」なんて、関数型畑の人たちになじられやしないかという
0556デフォルトの名無しさん
2009/06/02(火) 09:20:52長ったらしいが
0557デフォルトの名無しさん
2009/06/06(土) 21:48:20どうせ次にはJ#のポジションになってるんでしょw
0558デフォルトの名無しさん
2009/06/06(土) 22:33:26SUNともめたせいだからなぁ。
その点、F# はMSリサーチ製なんで大丈夫。
0559デフォルトの名無しさん
2009/06/06(土) 22:40:450560デフォルトの名無しさん
2009/06/06(土) 23:00:590561557
2009/06/07(日) 00:03:290562デフォルトの名無しさん
2009/06/07(日) 00:06:54自分で自分の事をアホ呼ばわりしてるようにしか見えんのだが
0563デフォルトの名無しさん
2009/06/07(日) 17:05:15/ 共\
∧∧ ( `ハ´) ∧∧
/留学\ ( ~__))__~) /留学\ カタカタ
(`ハ´ ) カタカタ | .(`ハ´ )
_| ̄ ̄||_) | .j._| ̄ ̄||_)
/旦|――||// /| ../旦|――||// /|
| ̄ ̄ ̄ ̄ ̄ ̄| | | ̄ ̄ ̄ ̄ ̄ ̄| |
中国の検閲システム金盾は2ch.netへのアクセスを遮断している
http://www.greatfirewallofchina.org/test/index.php?id=18911
にもかかわらず…
2ちゃんねるのアクセス状況(08年3月時点)
http://alexa.com/data/details/traffic_details/2ch.net
1. 日本 874/1000
2. 中国 57/1000 <<ネット規制のある国でアメリカの5倍以上?
3. 米国 10/1000
24. 韓国 1/1000
中国から金盾を介さないで2chにアクセスしている輩は何者か?
0564デフォルトの名無しさん
2009/06/08(月) 12:03:510565デフォルトの名無しさん
2009/06/08(月) 12:19:300566デフォルトの名無しさん
2009/06/08(月) 14:39:220567デフォルトの名無しさん
2009/06/08(月) 21:51:58Custom Numeric Literalがどうしてもできんのだが
アレどうやったら定義できるの?わかる人いる?
0568デフォルトの名無しさん
2009/06/09(火) 00:04:11私も NumericLiteralI が定義されたソースコード
(C:\Program Files\FSharp-1.9.6.16\source\fsharp\FSharp.Core\math\z.fs)
を見て試してみましたが、上手くいきませんでした。
とりあえずモジュールの記述をそのまま自分の *.fs にコピーしてきたのですが、
(BigInt とかの型問題はもちろん解決させた上で)
そのリテラルを使うと "This is not a valid numeric literal." と怒られますね。
0569デフォルトの名無しさん
2009/06/12(金) 19:38:42#loadした先のファイルに#loadや#rがあったらエラーになる
#if INTERACTIVE,#endfしてもダメ。
1.9.6.2は平気
なんでー
一応エラー文面はっとく
hoge.fs(4,1): error FS0076: This directive may only be used in F# script file
s (extensions .fsx or .fsscript). Either remove the directive, move this code to
a script file or delimit the directive with '#if INTERACTIVE'/'#endif'.
0570デフォルトの名無しさん
2009/06/12(金) 19:59:51hoge.fsがhoge.fsx
ロード先ファイルが.fsx/.fs
等の組み合わせもいろいろためしたけど同じエラーが出る
0571デフォルトの名無しさん
2009/06/14(日) 15:54:58> only the suffixes in the set "INZQRG" are supported
http://cs.hubfs.net/forums/thread/10939.aspx
もうね、そうならそうと Release Note に書いといてくれと
0572デフォルトの名無しさん
2009/06/14(日) 16:53:38おぉ、できた。
苦労してできた後で思ったんだが、
これって何に使うんだろ・・・
いまいち分からん
0573デフォルトの名無しさん
2009/06/14(日) 17:16:00Custom Numeric Types による有理数表現を一部実装してみたが、
面倒な割には余り恩恵が得られなさそうだ。
0574デフォルトの名無しさん
2009/06/14(日) 17:44:29まあ関数なりで代用は利くけどね
無駄なカッコが省けるし、コード読みやすくなって割とイイと思う
面倒っちゃ面倒だけど取り立てて言うほどのものでもなくないかい?
0575デフォルトの名無しさん
2009/06/14(日) 18:38:39そもそも Custom Numeric Types 自体が取り立てて言うほどのものでもないような
0576574
2009/06/14(日) 20:22:38F# を F# たらしめている、と思うんだけれども
言語機能としてあるのにユーザ定義はできない
みたいなことがないように言語が設計されている
てのはよろこぶべきことなんじゃないかと
0577デフォルトの名無しさん
2009/06/14(日) 20:37:34そうですよね、すいません、別に悪く言うつもりは無かったんです。
他にどういうシチュエーションで使うと便利なんだろなぁという程度の気持ちでした。
(printfn なんかで使われてる可変数引数も
簡単にユーザー定義できるようになるといいなぁ・・・)
それはそうと、VS でのプロジェクト作成時に
オプション設定を無視して勝手に保存されるのは、
正式リリースではちゃんと直してくれるんだろうか。
0578sage
2009/07/24(金) 10:00:320579デフォルトの名無しさん
2009/08/22(土) 18:32:01裏でコマンドプロンプトが立ち上がるのがうっとうしくてしょうがないんだ
どうしたら消せるのん?
let CreateWindow : string -> Window =
fun path ->
use reader = XmlReader.Create(path)
XamlReader.Load(reader) :?> Window
// Main
[<STAThread>]
do
let w = CreateWindow "Window1.xaml"
let app = new Application()
app.Run(w) |> ignore
0580デフォルトの名無しさん
2009/08/23(日) 05:43:22Application -> Output type を
Windows Application に変えれば消えるんじゃない?
0581デフォルトの名無しさん
2009/08/24(月) 22:40:390582デフォルトの名無しさん
2009/08/29(土) 17:29:32効果的に使える分野がわからない。
大量データで大量に処理する用途って動画とかそっち方面?
0583デフォルトの名無しさん
2009/08/29(土) 18:29:47一度慣れるとC#とか万度くさくて。
0584名無しさん@そうだ選挙に行こう
2009/08/30(日) 13:22:35それはアプリの当該機能部分のみにF#使おうとしてるのか
そういう機能を持ったアプリ全体をF#で書こうとしてるのか。
どっちなんだろか。
0585名無しさん@そうだ選挙に行こう
2009/08/30(日) 13:57:22別に高速計算のためだけに並列処理があるわけじゃないぞ。
GUIのインターフェース部分とメイン処理部分のスレッドを分けて、GUIの反応が悪くならないようにしたり、
ネットワークプログラムならそれぞれのセッション毎にスレッドを分けたり、
オブジェクトみたいな乗りで複数のプロセス同士をメッセージ通信でやりとりしたり(アクターモデル?プロセス代数?パイカルキュラス?)、
並列/並行プログラミングはプログラミングパラダイムだと考えた方がいい。
0586名無しさん@そうだ選挙に行こう
2009/08/30(日) 13:59:310587名無しさん@そうだ選挙に行こう
2009/08/30(日) 16:40:45あんなんいらないと思うんだけど
0588名無しさん@そうだ選挙に行こう
2009/08/30(日) 16:58:34便利じゃん。
いちいちコンパイルしてテストなんてやらずに、対話的にいろいろ式を変化させて試せる。
軽量プログラミング言語とはそういうもんだ。
0589名無しさん@そうだ選挙に行こう
2009/08/30(日) 17:22:18MSは次期オフィスにVBAの代わりにF#でも載せればいのに。。
VBAはあまりにも古臭い。
0590デフォルトの名無しさん
2009/09/04(金) 00:51:14逆に手続き型のほうが相補的で良いのかも知れないが。
0591デフォルトの名無しさん
2009/09/05(土) 00:43:35金融か。やっぱブラック=ショールズ公式適用できない問題に使われるのか。
金融に使われるためには、幾何ブラウン運動のシミュレーションできる
ライブラリがないと難しいかも。
0592デフォルトの名無しさん
2009/09/05(土) 01:17:54C#を使わずにF#を使う利点ってどんなものがある?
関数型言語は慣れると工数を削れると言われているけど、
現状のF#ではC#よりも手軽に・・・とはいかないよね?
VS2010でGUIにて開発ができるようになると変わるのかな・・・
0593デフォルトの名無しさん
2009/09/05(土) 01:23:02一般的なプログラミング言語よりも数式の方を見慣れてる人向けだろうなぁ。
関数型(変数はimmutableで、関数のチェインでプログラム作る)ってのは
確かに並列処理には向いてるんだけども・・・
今、「関数型」って言われてるような言語はちょっと既存の流行りのプログラミング言語と
パラダイムが違いすぎて、そのままだと流行りようがないと思う。
なんか、C#っぽい文法、C#に近い文法で書いてるつもりが、
いつの間にかimmutableな変数使わされてて、
いつの間にか関数型なコード書いてるっていうような、
開発者に関数型を意識させない関数型言語みたいなのができないことにはなぁ。
0594592
2009/09/05(土) 01:37:30確かに関数型言語は理数系向きといわれてるね。
変数がimmutableということは、一つの関数は小さく作らざるを得ないだろうし、
となると、再利用の効率も上がるだろうし、
少しでも文法に慣れると可読性も高くなるだろうから、
将来的にはそれが利点になるのかな…。
しかし、これもVB6→VB.NET or C#のときも、
オブジェクト指向ということばと共に、同じことを言ってたような気がするな…。
まあ、とりあえず暫くはぬるーく付き合いを続けてみます。
0595デフォルトの名無しさん
2009/09/05(土) 09:22:41C#だって、C++系統の文法(見た目だけでも)かなり借用して、
そっちからの移行をかなり強く意識したわけで。
今となっては失敗だったと思う文法もあるけど、当時としてはやむなかったと思うし。
0, 1 で変わるようなパラダイム変化は大衆向けにはできない。
どっかのタイミングで、C#の成果とF#の成果が自然と融合して次の世代が生まれるかもしれないし、
F#に触れること自体は損にはならないと思うけど。
0596デフォルトの名無しさん
2009/09/05(土) 14:30:45本場のオカムラ-によると型推論がなってないとか多態バリアントねーじゃんとかだめ出しされてる・・・(´;ω;`)ウッ…
0597デフォルトの名無しさん
2009/09/05(土) 22:48:31VF#インスコすると.mlファイルもなんかアイコンが変えられるし
OCamlの開発環境として使えるんだろうか。
OCamlの遺産を使いまわすつって需要があると思えんし。
0598デフォルトの名無しさん
2009/09/06(日) 09:16:21ひさしぶりに関数型言語触ってみるかな。
0599デフォルトの名無しさん
2009/09/09(水) 03:50:28http://derivative.fixstars.com/hpc.html
これ読む限りだと、確率過程(いわゆる確率微分方程式の領域)を
めちゃくちゃいっぱい高速で作り出せれば興味もってもらえそう。
F#って乱数計算速い?もしくは、並列計算で速くできるもの?
乱数関係さっぱりわからんのよ。
0600デフォルトの名無しさん
2009/09/09(水) 03:51:570601デフォルトの名無しさん
2009/10/20(火) 01:06:400602デフォルトの名無しさん
2009/10/20(火) 01:49:000603デフォルトの名無しさん
2009/10/20(火) 11:14:12「特定用途」が何か一言も書けないような人は触ったことないだろうし
今後も使わないだろうから、無理して来なくていいよ。
0604デフォルトの名無しさん
2009/11/08(日) 19:18:310605デフォルトの名無しさん
2009/11/08(日) 21:54:590606デフォルトの名無しさん
2009/11/08(日) 23:09:110607デフォルトの名無しさん
2009/11/09(月) 01:15:21mutable に使うのはメンバー変数かループで反復に使うものくらい。
それ以外のローカル変数は immutable でもまず困らない。
まあでも、デフォルトが immutable なのはやっぱちょっと使いづらい。
0608デフォルトの名無しさん
2009/11/09(月) 07:39:130609デフォルトの名無しさん
2009/11/10(火) 00:31:24役に立たないとは言わないけど、そんなにメリット大きい?
その代償として OOP 的なメンバー変数使えなかったり、
ループ全部再帰で書かなきゃ行けなくなるってデメリット以上に。
並列化しやすいとかいうのは、
要はスレッド間で状態を共有できなくすればいいだけの話なんで、
immutable はやり過ぎ。
変数は全部スレッドローカル、スレッド間で参照渡すの禁止、
スレッド間通信は Actor (MS 的に言うと Agent)ベースのメッセージ交換でやる
ってのだけで行けるはず。
0610デフォルトの名無しさん
2009/11/10(火) 00:50:52多分、関数型チックに書くのになれてくと自然とそういう風に書かなくなると思われ。
0611デフォルトの名無しさん
2009/11/10(火) 01:04:36そっちに慣れた結果得られるものは何?
0612デフォルトの名無しさん
2009/11/10(火) 02:18:30両方使い分けができてデフォルトがimmutableな分には別に問題ないと思う。
0613デフォルトの名無しさん
2009/11/10(火) 02:29:12関数型でやりたくないならなぜF#を使うのか知りたい
0614デフォルトの名無しさん
2009/11/10(火) 06:33:06(簡潔に書けること+状態無し)による高生産性が主なメリットじゃね。
0615デフォルトの名無しさん
2009/11/10(火) 08:40:31hoge.Connect()なんてるそっどがあって
例外が返ってこなくなるまでリトライし続けるのはどう書けばいいの?
0616デフォルトの名無しさん
2009/11/10(火) 10:00:35それ、ほんと簡潔で生産性高い?
0617デフォルトの名無しさん
2009/11/10(火) 16:22:53一般的にはそういうイメージなのかなあ。
自分はforeachとかfold/Aggregateのようなものをよく使う印象。
0618デフォルトの名無しさん
2009/11/10(火) 16:40:04必ずやるプロセスなんだよね。ループ的な処理を再帰で書かせるのは。
一旦慣れてしまうと、mapとかの高階関数を使うようになって、自分で
高階関数を書いたり直接再帰を書いたりはしなくなるわけだけど。
0619デフォルトの名無しさん
2009/11/10(火) 23:05:36まあ完全に関数型に移行するのは難しいけど、C#だって最近は関数型的になってるし
0620デフォルトの名無しさん
2009/11/15(日) 09:44:332010はドットネット4.0上でCTPは2.0上?
0621デフォルトの名無しさん
2009/11/15(日) 23:05:29You'll also see 1.9.7.4 reported as the F# compiler version number
for VS2010, and 1.9.7.8 for the compiler in the CTP ZIP and MSI.
These compilers are the same apart from some very minor differences
such as this.
ttp://blogs.msdn.com/dsyme/archive/2009/10/21/some-smaller-features-in-the-latest-release-of-f.aspx
0622デフォルトの名無しさん
2009/11/28(土) 23:29:24あれ、通貨レートとかうまい具合利用できたりするの?
0623デフォルトの名無しさん
2009/11/28(土) 23:34:470624デフォルトの名無しさん
2009/11/28(土) 23:36:190625デフォルトの名無しさん
2009/11/28(土) 23:43:06いろいろ絡んでくるからFX専門会社とかに任せないと無理として、
計算で便利ったら通貨だよね。
0626デフォルトの名無しさん
2009/12/01(火) 15:45:020627デフォルトの名無しさん
2009/12/01(火) 16:47:160628デフォルトの名無しさん
2009/12/01(火) 18:39:580629デフォルトの名無しさん
2009/12/02(水) 11:11:35コメントが (* *) なのは何とかして欲しい。
0630デフォルトの名無しさん
2009/12/02(水) 11:55:560631デフォルトの名無しさん
2009/12/02(水) 19:58:430632デフォルトの名無しさん
2009/12/02(水) 20:55:50> List.fold_left (* ) 1 [1..10]
- ;;
- ;;
- ;;
-
-
何を入力しても反応がなくなってあせるぜ。
0633sage
2009/12/05(土) 12:26:13> コメントが (* *) なのは何とかして欲しい。
たしかに慣れるまでキモいけど、入れ子に出来るのは最強だろ。
(*
let hogehoge = ...
(*
let foobar = ...
*)
...
*)
0634デフォルトの名無しさん
2009/12/05(土) 16:21:450635デフォルトの名無しさん
2009/12/08(火) 23:21:58C#ほど普及しないで廃れそうな気がするな
言語自体は面白そうだけど
0636デフォルトの名無しさん
2009/12/08(火) 23:48:00.NET 使えばいろんな言語の相互運用できるよっていうポーズと、
リサーチの連中が作ったやつがなんか話題呼んでるみたいだし正式搭載するか
って程度のものかと。
0637デフォルトの名無しさん
2009/12/08(火) 23:52:17良さそうな感じするけどな
0638デフォルトの名無しさん
2009/12/08(火) 23:58:15普通の企業はGoogleとかMSの検索エンジンを作りたいわけでもないので、
目に見えてメリットがあるような要素がないと飛びつかないだろうね
0639デフォルトの名無しさん
2009/12/09(水) 05:49:53使う人は使うようになると思うな。
C#からF#を呼び出す使い方が重要になる。
0640デフォルトの名無しさん
2009/12/09(水) 07:07:190641デフォルトの名無しさん
2009/12/09(水) 08:44:55VS SDKでの対応は続くでしょ?
0642デフォルトの名無しさん
2009/12/09(水) 09:12:15>>639 の言うとおり、C# からの呼び出し方をもっとアピールした方が。
0643デフォルトの名無しさん
2009/12/09(水) 11:20:21それ次第では、C#の一部をF#におきかえられるんだけど。
0644デフォルトの名無しさん
2009/12/09(水) 11:32:280645デフォルトの名無しさん
2009/12/09(水) 11:35:390646デフォルトの名無しさん
2009/12/09(水) 11:48:51互換ライブラリ(FSharp.PowerPack.dll)をロードすれば使える。
0647デフォルトの名無しさん
2009/12/09(水) 11:53:54exeを配布する場合はそのdllも添付しないといけないの?
0648デフォルトの名無しさん
2009/12/09(水) 11:56:51それと一緒に配布されている。
0649デフォルトの名無しさん
2009/12/09(水) 12:02:46マルチンコアでのスケール
0650デフォルトの名無しさん
2009/12/09(水) 12:20:23標準のスレッドプールを使った簡易版みたいなので、
.NET4.0からは標準のパラレルAPIを使うようになるんじゃないかなぁ。
#light
open System.Threading
let tid = fun () -> Thread.CurrentThread.ManagedThreadId
let sleep = fun (t:int) -> System.Threading.Thread.Sleep t
let x1() = [|1..100|] |> Array.map(fun x -> sleep(100); [|x ; tid()|])
let x2 = [|1..100|] |> Array.map(fun x -> async { sleep(100); return [|x ; tid()|] } ) |> Async.Parallel
let _ = printfn "%A" (x1()); printfn "%A" (Async.RunSynchronously x2)
19.6系から1.9.7系に変えたらメソッド名の変更が多すぎてワロタ。
VS2010が出るのにこんなに変えて大丈夫なのか・・・
0651デフォルトの名無しさん
2009/12/09(水) 12:43:08Axumがどのくらい実用的に動くか分からないし
0652デフォルトの名無しさん
2009/12/09(水) 18:49:310653デフォルトの名無しさん
2009/12/09(水) 19:17:440654デフォルトの名無しさん
2009/12/09(水) 19:20:090655デフォルトの名無しさん
2009/12/09(水) 19:21:56OCamlの日本語テキスト読んどけば?
0656デフォルトの名無しさん
2009/12/09(水) 19:49:49COM+
0657デフォルトの名無しさん
2009/12/10(木) 00:12:00ボタンにイベントを追加しようとしているのですが、
戻り値がDialogResultでUnitではないと怒られます。
戻り値はいらないのですがどのように書けばいいでしょうか。
0658デフォルトの名無しさん
2009/12/10(木) 03:20:49MessageBox.Show("Hello World") |> ignore
0659デフォルトの名無しさん
2009/12/10(木) 09:51:26それスマートですね。ありがとう。
こんなことをやってました・・
button.Click.Add( fun args -> let dm = MessageBox.Show("Hello World") in () )
0660デフォルトの名無しさん
2010/01/04(月) 00:55:000661デフォルトの名無しさん
2010/01/22(金) 00:13:11オブジェクト指向言語から入った人てきには、
こんなに簡素すぎてアレ大丈夫かしらって思ったりするんだが。。
残念なことに良い本がないからなのか、イマイチ中途半端な知識で止まってるのが残念
0662デフォルトの名無しさん
2010/01/22(金) 00:16:40MSにしては珍しく時代を先取りした感じがする
0663デフォルトの名無しさん
2010/01/23(土) 10:57:330664デフォルトの名無しさん
2010/01/23(土) 11:45:00需要が少ないからなんだろうけど。
0665デフォルトの名無しさん
2010/01/23(土) 21:17:500666デフォルトの名無しさん
2010/01/23(土) 21:21:150667デフォルトの名無しさん
2010/01/29(金) 08:33:160668デフォルトの名無しさん
2010/01/29(金) 11:54:470669デフォルトの名無しさん
2010/01/29(金) 12:23:160670デフォルトの名無しさん
2010/01/29(金) 12:33:020671デフォルトの名無しさん
2010/01/31(日) 15:47:50http://www.manning.com/laucher/
0672デフォルトの名無しさん
2010/02/02(火) 22:20:32#lightは
#onで使ってんの?
0673デフォルトの名無しさん
2010/02/02(火) 23:48:29アップデートのたびに動作が変わるのでちゃんと確かめたことはないのだが、
こういう認識で良いのだっけ?
.fs がデフォルトで #light "on"
.ml がデフォルトで #light "off"
#lightのみは #light "on" に同じ。
0674デフォルトの名無しさん
2010/02/08(月) 00:07:570675デフォルトの名無しさん
2010/02/11(木) 15:57:52VisualStudio2010が重いせいで
興味なくなったわ
0676デフォルトの名無しさん
2010/02/11(木) 16:00:200677デフォルトの名無しさん
2010/02/11(木) 16:02:44Pen4 2.6GHz 1GBぐらいだと電源ファン唸りっぱなし
Q9400 4GBでも起動すんのに数秒かかる
あんな糞重いGUI誰も望んでないとおもうんだ
0678デフォルトの名無しさん
2010/02/11(木) 16:29:52コマンドラインだけでいいならVS2008なしでも導入可能だよ。
0679デフォルトの名無しさん
2010/02/11(木) 16:56:43コマンドラインは無理っす
0680デフォルトの名無しさん
2010/02/11(木) 17:02:290681デフォルトの名無しさん
2010/02/11(木) 17:30:10C#より優位性ある?
0682デフォルトの名無しさん
2010/02/11(木) 17:48:250683デフォルトの名無しさん
2010/02/11(木) 18:10:320684デフォルトの名無しさん
2010/02/11(木) 18:24:34使いこなせるかどうかは使う人間次第
0685デフォルトの名無しさん
2010/02/11(木) 18:27:100686デフォルトの名無しさん
2010/02/11(木) 18:32:23IDEのサポートといってもほとんど何も無かったと思うけど。
どんな用途なんだか。
0687デフォルトの名無しさん
2010/02/11(木) 18:33:310688デフォルトの名無しさん
2010/02/11(木) 18:40:060689デフォルトの名無しさん
2010/02/11(木) 18:43:44かっこつけないで最初から「F#のメリットって何?」って聞けばいいじゃん
0690デフォルトの名無しさん
2010/02/11(木) 18:47:48メリットも解るんだけども、モジュールを丸々F#で書いてもいいと思える
ほど生産性の高い言語には見えないんだよな。
そもそも関数型言語のコードって、書く分にはいいけど読みにくくない?
0691デフォルトの名無しさん
2010/02/11(木) 18:55:10そしたら本気出す
0692デフォルトの名無しさん
2010/02/11(木) 19:16:24F# は見ただけでまだタッチしてないが、他の関数型言語でなら、
一つ一つの関数の定義に用いるコードが自然と短くなって、
むしろ見通しがいい。
ただ、ひとつの関数に複数の機能やフロー全体を気軽に盛り込もうとすると、
たいていは酷く読みにくくなる。
これは手続き型言語でも言えるが、関数型は比較してその傾向が高い。
0693デフォルトの名無しさん
2010/02/11(木) 19:21:26その超局所的な利用が F# の意義だと思うよ。
F# 単体で使われることはないと思う。
別に、C# を置き換えるための言語じゃないから、
C# よりも生産性高くなくても別にいい。
0694デフォルトの名無しさん
2010/02/11(木) 19:28:14入力->出力になるから、いくらでも分解して並列処理できるってメリットあるわけだ。
でも、その性質を効果的に利用できる分野ってなんだろうか。
0695デフォルトの名無しさん
2010/02/11(木) 19:40:47だとすると、C#と混在で使えるようにならないと実用は苦しいな。
言語の境界=モジュールの境界な現状では超局所的利用そのものが難しい。
0696デフォルトの名無しさん
2010/02/11(木) 19:52:49もともと Research の言語だし。
2010 でも Visual F# 単体リリースないし。
その程度の位置づけ。
0697デフォルトの名無しさん
2010/02/11(木) 20:20:430698デフォルトの名無しさん
2010/02/11(木) 20:23:280699デフォルトの名無しさん
2010/02/11(木) 20:25:400700デフォルトの名無しさん
2010/02/11(木) 20:51:37書いたときはスッキリして美しいと思ったコードが後で見たら???って事あるよな。
これは関数型言語だけの話じゃないけど。
なんちゅうか、関数型の方が書き手を選ぶというか、よりセンスを問われる感じがする。
書き慣れてない人にに使わせると大火傷しそう。
0701デフォルトの名無しさん
2010/02/11(木) 21:09:140702デフォルトの名無しさん
2010/02/11(木) 21:38:42それだとモジュール丸々F#で書く事になるだろ。
C#よりF#が適している状況はもっと限られていて、プログラムモジュールよりも
コンテキストが狭いんじゃないか、という話をしてる。
0703デフォルトの名無しさん
2010/02/11(木) 21:42:35なんでモジュール丸ごと書いちゃダメなわけ?
その理由を先に行って貰わないと
0704デフォルトの名無しさん
2010/02/11(木) 22:08:09狭くないよ
C# + WPF で GUI 作って、バックでの計算は F# でってのは違和感なくできる。
0705デフォルトの名無しさん
2010/02/11(木) 22:10:29周りの開発者のレベルが低くて関数型とかを使いこなせんとかは除く。
0706デフォルトの名無しさん
2010/02/11(木) 22:15:220707デフォルトの名無しさん
2010/02/11(木) 22:27:46・.NETのライブラリを使える
・他の言語から呼び出せる
・コンパイルしなくてもスクリプトで使える
もう俺なんかこれだけでウホッって感じだ
0708デフォルトの名無しさん
2010/02/11(木) 22:34:23まだ最適化があまり発達してないから、実際には C# よりもスピード遅いな。
コンパイルされたコードを見ると、関数型の特徴を実現するために
余計なクラスが大量に作られていたりする。
まぁそれで問題になるようなものには、そもそも .NET は使わんが。
0709デフォルトの名無しさん
2010/02/12(金) 01:06:37「書けます」ってのはわかるけど、オブジェクト指向中心で書くなら
明らかにC#のほうがスッキリ記述できるわけで。
手段と目的がひっくり返ってね?
ちょっと前にも書いてる人いたけど、関数型の設計/記述の方が
スマートに書ける状況って特定のパターンにハマった時だけでしょ。
だったらそこだけに適用しようとするのは道理だと思うんだけど。
0710デフォルトの名無しさん
2010/02/12(金) 01:11:05Microsoft F#, February 2010 Community Technology Preview
http://www.microsoft.com/downloads/details.aspx?FamilyID=ba52e650-4e77-4b0b-b987-9f9ecd3bab3b&displaylang=en
VS2010向けRC ver.2.0.0.0
Microsoft Visual Studio 2010 F# Runtime 2.0 RC
http://www.microsoft.com/downloads/details.aspx?FamilyID=8ff66036-37e2-4ae4-9651-3317c028c6ec&displaylang=en
0711デフォルトの名無しさん
2010/02/12(金) 01:19:201秒で却下されるだろうな
0712デフォルトの名無しさん
2010/02/12(金) 01:36:50VS2010向けのはruntimeだけでコンパイラもInteractiveも入ってなかった。
こっちからVSごとダウンロードをしてくれ。
http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx
0713デフォルトの名無しさん
2010/02/12(金) 02:03:54UIの裏で動いてるのが本当に計算的な処理だけならF#もよさそうだけど
IOやら状態管理やらがあるのが普通なわけで。
そういうのはF#ですっきり書ける気がせんのだよなあ。
0714デフォルトの名無しさん
2010/02/12(金) 08:12:44ttp://msdn.microsoft.com/ja-jp/library/dd233154(VS.100).aspx
ビジュアルF番号ってなんだよ〜
C# から F# の呼び出しは、これまでモジュールやネームスペースの扱いが、
ころころ変わってたのであんまり話題にできなかった。
0715デフォルトの名無しさん
2010/02/12(金) 08:17:28そして、F#の強みはそれらの容易な統合を.NET上でできるところ。
0716デフォルトの名無しさん
2010/02/12(金) 17:35:13汚ねえ……
同じ.NET言語なのにまるでffiだな
こんなに汚くて面倒なのでは、単純で疎な結合で済む程度の相互運用以外は
非現実的なのでは
0717デフォルトの名無しさん
2010/02/12(金) 17:44:330718デフォルトの名無しさん
2010/02/12(金) 17:44:51スマートにやりたいなら IEnumerable<T> を seq<T>にマップするのがよい。
F#2.0(CLR4.0対応版)からTupleがSystem.Tuple(mscorlib)を使うようになったので、
互換も取りやすくなった。
0719デフォルトの名無しさん
2010/02/12(金) 17:53:31-- fs
namespace Local.FSharp
module XpaiLib =
let private xpai ar ad =
let pi = System.Math.PI
ar |> Seq.map (( * ) pi) |> Seq.map(( + ) ad)
let Xpai (ar:seq<float>) (ad:int) :seq<float> =
xpai ar (float ad)
-- cs
foreach (var v in Local.FSharp.XpaiLib.Xpai(new []{10.5, 8.9, 1.1, 3.4, 1.9, 100.0 }, 1000))
Console.WriteLine(v);
0720デフォルトの名無しさん
2010/02/12(金) 18:00:07ありがとう、それならマシだね
F#側のカリー化された関数を、C#側で普通の関数のように呼べるのか
0721デフォルトの名無しさん
2010/02/15(月) 00:49:21あーあ、がっかり。
中途半端なIronなんちゃらじゃなくて、Scheme#とHaskell#をMSが作ってくれないかな。。
0722デフォルトの名無しさん
2010/02/15(月) 05:38:54Haskellだと遅延評価の最適化に問題がある。
現時点で、ベンダが自分の所の言語のひとつとして採用する分には、
OCamlは割と妥当な選択だと思うけどね。納得できる。
十年先は、また違う展開になってるだろうけど。
0723デフォルトの名無しさん
2010/02/15(月) 08:11:340724デフォルトの名無しさん
2010/02/15(月) 09:23:110725デフォルトの名無しさん
2010/02/15(月) 16:53:29OCamlの方がいいだろ
0726デフォルトの名無しさん
2010/02/16(火) 00:35:30「let rec」
コンパイラが出来ることを人にやらせる。
これによってバグを抑制出来るのならばよいが、単に冗長なだけ。
こういう無駄をみると、他にもたくさん言語仕様の中に無駄が潜んでいるだろうなと思っちゃう。
あーあ、残念。
0727デフォルトの名無しさん
2010/02/16(火) 01:16:04束縛の再定義が嫌な人もいるだろうけど、個人的には便利。
let square n =
let f x = x + 1
let f = function 1 -> 1 | x -> x * f (x - 1)
f n
let factorial n =
let f x = x + 1
let rec f = function 1 -> 1 | x -> x * f (x - 1)
f n
printfn "5^2 = %d, 5! = %d" (square 5) (factorial 5)
0728デフォルトの名無しさん
2010/02/16(火) 01:24:18その手の妥協はあると思うけどね。
大事なのは利点と欠点のバランスじゃない?
0729デフォルトの名無しさん
2010/02/16(火) 02:50:310730デフォルトの名無しさん
2010/02/16(火) 04:33:53それを言われると let, let*, letrec, letrec* なんてある Scheme の立場が……
まあ実際はあればあったで使い分けるんだけど
0731デフォルトの名無しさん
2010/02/16(火) 07:18:21プログラマに注意を促す印だろ。
0732デフォルトの名無しさん
2010/02/16(火) 07:42:17これどんなふうに結果変わるのさ?
recは型推論のためにあると聞いたが…
0733デフォルトの名無しさん
2010/02/16(火) 10:01:040734デフォルトの名無しさん
2010/02/16(火) 10:03:35おしえてくだされ
0735デフォルトの名無しさん
2010/02/16(火) 10:10:180736デフォルトの名無しさん
2010/02/16(火) 10:17:280737デフォルトの名無しさん
2010/02/16(火) 19:17:420738デフォルトの名無しさん
2010/02/16(火) 19:22:50一方でHaskellは無限ストリームを使う点からしても再帰とそうでないものを区別する文化じゃないし
そもそも >>726 が言う言語仕様の無駄って何だ。let recが無駄ならletも無駄だわなJK.
ML系以外には殆どないんだもの。
そんなどうでもいい差異よりも気になるのは例えば
・明らかに推論できる型も推論できないその辺の言語たちのことか
・外から呼べるようにするためにはpublicとかstaticとかfinalとか常に書かなきゃならんとか
・templateとかいうキーワードがないと多相関数も書けんとか
・オブジェクトがないと手続き抽象すらできないとか
・無駄にカッコが多いとか
ぱっと見でも他の言語でそういう話はいくらでも出てくるのに、
OCamlにケチつけるところがrecってあたりがしょぼい。
mli/signature書くのは面倒とか、functorってややこしい割に使えねえとか、
年々研究者が作ったわけのわからん機能がなされるとか、そういう話ならまだわからんでもないが。
0739デフォルトの名無しさん
2010/02/16(火) 19:26:200740デフォルトの名無しさん
2010/02/16(火) 19:30:480741デフォルトの名無しさん
2010/02/17(水) 21:45:21The need to specify 'rec' in a recursive function defintion
http://groups.google.com/group/fa.caml/browse_thread/thread/0d579e64dd00daff?pli=1
0742デフォルトの名無しさん
2010/02/18(木) 08:21:29recはλ理論でいうYコンビネータを呼び出しているという意味付けがある
っていうのがocaml界での認識ってことらしい
0743デフォルトの名無しさん
2010/02/28(日) 19:37:55どうみてもTwitterのほうがましだろwwww
文句あるなら恥ずかしがらずにRTしろwwwww
0744デフォルトの名無しさん
2010/02/28(日) 19:59:12web記事かなり増えてきたけどメモ書きレベルのゴミばっかりだな
ぶっちゃけOCaml互換・非互換から.netまで自由自在となると相当大変だが。
市販本3冊くらいあるけどドンシメの名前がある奴で問題ない
付属ドキュメントは見難いがMSDNが微妙に充実してるな
0745デフォルトの名無しさん
2010/02/28(日) 23:33:41充実には程遠いってのならわかるが、ゴミとは手厳しいね。
なぜにゴミと言い切る?ゴミでないためにはなにが必要?
0746デフォルトの名無しさん
2010/03/01(月) 00:45:31要はそれを読めないお前がゴミだってことだ.
0747デフォルトの名無しさん
2010/03/17(水) 22:51:24http://www.amazon.co.jp/dp/4777515001/
0748デフォルトの名無しさん
2010/03/17(水) 23:00:32ちなみにカス本だった。
0749デフォルトの名無しさん
2010/03/17(水) 23:01:580750デフォルトの名無しさん
2010/03/17(水) 23:13:500751デフォルトの名無しさん
2010/03/18(木) 00:01:120752デフォルトの名無しさん
2010/03/21(日) 22:28:12それカス本すぎる。
まぁしかし、技術本の半分以上はカスだよな。
この世界で良い本はそんなにないんだよな・・・
0753デフォルトの名無しさん
2010/03/21(日) 23:38:220754デフォルトの名無しさん
2010/03/25(木) 12:05:35英語で、日本のあれこれを紹介しているシリーズが多数ヒットする
なにこれwww
0755デフォルトの名無しさん
2010/03/29(月) 04:45:470756デフォルトの名無しさん
2010/03/29(月) 18:28:240757デフォルトの名無しさん
2010/04/06(火) 04:14:150758デフォルトの名無しさん
2010/04/06(火) 07:31:48ナイスなHaskell.NETキボン。
0759デフォルトの名無しさん
2010/04/13(火) 15:43:10OCamlの入門としてお勧めな本はどれなのでしょうか
0760デフォルトの名無しさん
2010/04/13(火) 21:52:31ああ、これ自分もしょぼいと思ったよ。理論・理屈は置いて
0761デフォルトの名無しさん
2010/04/17(土) 21:02:25普通に
『プログラミング in OCaml』
五十嵐 淳 (著)
じゃない?
それとスレこっちじゃね↓
関数型言語ML (SML, OCaml, etc.), Part 6
http://pc12.2ch.net/test/read.cgi/tech/1245017721/
まぁ、オレはLispの後、OCamlを中途で投げてHaskellに行ったけど・・・
0762デフォルトの名無しさん
2010/04/17(土) 21:20:45ちなみにOCamlはどこで嫌になったの?
0763761
2010/04/17(土) 22:13:21OCamlの本(>>761ではなく『プログラミングの基礎』の方)を読んでたときに
中々頭入らなくて、そんな時にHaskellの本読んだらスーッと入ってきたの
で、そこからHaskellに乗り換えちゃった
だから言語が合わなかったのか書籍が合わなかったのかちょっと分からん
0764デフォルトの名無しさん
2010/04/29(木) 18:48:19F#自体に圧倒的なメリットがなければ、無料の開発環境がないんじゃ誰も使わないだろ。
MSはF#をどうしたいんだろうな。Visual F# Express 出せよ。
0765デフォルトの名無しさん
2010/04/29(木) 18:56:490766デフォルトの名無しさん
2010/04/29(木) 19:02:410767デフォルトの名無しさん
2010/04/30(金) 22:30:35F#(というか関数型言語全般)は書くときは書き易いが、読みにくいな。
コードの意図を読み解くのに時間がかかるというか。
これは慣れで解決するものだろうか。
0768デフォルトの名無しさん
2010/04/30(金) 23:05:210769デフォルトの名無しさん
2010/05/01(土) 14:55:23スクリプト書くくらいならIDEなんかいらん、コンソールで十分
0770デフォルトの名無しさん
2010/05/01(土) 15:13:160771デフォルトの名無しさん
2010/05/02(日) 13:18:050772デフォルトの名無しさん
2010/05/02(日) 23:42:340773デフォルトの名無しさん
2010/05/06(木) 03:02:070774デフォルトの名無しさん
2010/05/06(木) 08:26:320775デフォルトの名無しさん
2010/05/06(木) 09:59:500776デフォルトの名無しさん
2010/05/06(木) 10:02:48いつものこと
0777デフォルトの名無しさん
2010/05/06(木) 10:28:220778デフォルトの名無しさん
2010/05/06(木) 10:32:210779デフォルトの名無しさん
2010/05/29(土) 16:33:27Visual Studio Shell + F#
0780名無しさん@そうだ選挙に行こう
2010/07/11(日) 19:04:12ほんとに出るんだ(978-4-87311-466-8)
8月発売か
もう原書持ってるから買わんけど
0781デフォルトの名無しさん
2010/07/19(月) 08:04:480782デフォルトの名無しさん
2010/07/19(月) 10:24:34ttp://www.oreilly.co.jp/catalog/soon.html
0783デフォルトの名無しさん
2010/07/19(月) 10:36:31http://msdn.microsoft.com/ja-jp/library/ee340434.aspx
0784デフォルトの名無しさん
2010/07/21(水) 09:25:49サルまばたきしやがる
0785デフォルトの名無しさん
2010/07/21(水) 12:58:130786デフォルトの名無しさん
2010/07/23(金) 11:23:350787デフォルトの名無しさん
2010/07/24(土) 08:21:550788デフォルトの名無しさん
2010/07/24(土) 12:10:430789デフォルトの名無しさん
2010/07/26(月) 10:44:050790デフォルトの名無しさん
2010/07/26(月) 11:20:510791デフォルトの名無しさん
2010/07/26(月) 19:35:110792デフォルトの名無しさん
2010/08/14(土) 01:19:210793デフォルトの名無しさん
2010/08/21(土) 22:38:190794デフォルトの名無しさん
2010/08/25(水) 11:58:33言語としてとてもナイスだと思うんだが実践で使われるのはまだ少ないのかのぅ・・・
仕事場で鋭意普及中。
0795デフォルトの名無しさん
2010/08/25(水) 13:21:33何がうれしいのかさっぱりなんだと思うよ。
0796デフォルトの名無しさん
2010/08/25(水) 18:54:32などと比較して利点を示さないと新言語の魅力はなかなか伝わらないね。
F# に限らんけど。
0797デフォルトの名無しさん
2010/08/25(水) 19:47:220798デフォルトの名無しさん
2010/08/25(水) 19:55:340799デフォルトの名無しさん
2010/08/25(水) 23:24:17明日発売のようですね。
http://www.amazon.co.jp/dp/4873114667
>プログラミングF#
>出版社: オライリージャパン (2010/8/26)
>発売日: 2010/8/26
0800デフォルトの名無しさん
2010/08/26(木) 00:16:360801デフォルトの名無しさん
2010/08/26(木) 00:27:380802デフォルトの名無しさん
2010/08/26(木) 00:51:02並列化にすることの恩賜が増えているのは事実。
将来コア数がどれぐらいになるかわからんけど、
今の型落ちPCですら4コアあるからね。
0803デフォルトの名無しさん
2010/08/26(木) 01:57:40うちの会社だと2割居るかどうかかな・・・
0804デフォルトの名無しさん
2010/08/26(木) 04:39:390805デフォルトの名無しさん
2010/08/26(木) 07:29:04> MSってだけで虫唾が走る
それは MS の商売気質に対してだろ
Microsoft Research は MS の商売関係なく、
F# を始め広範囲にかなり面白いことを色々やってるぞ
Haskell に多大な貢献をしたのも MSR の人だし
0806デフォルトの名無しさん
2010/08/26(木) 07:59:440807デフォルトの名無しさん
2010/08/26(木) 08:21:590808デフォルトの名無しさん
2010/08/26(木) 20:10:450809デフォルトの名無しさん
2010/08/30(月) 15:02:07VisualStudioの抱負なデバック環境で使える言語は魅力
0810デフォルトの名無しさん
2010/08/30(月) 16:01:21Eclipse + Scalaには期待してる
0811デフォルトの名無しさん
2010/08/30(月) 16:44:04これの感想はないのか?
0812デフォルトの名無しさん
2010/08/30(月) 20:44:480813デフォルトの名無しさん
2010/08/30(月) 20:53:54似たようなもん?
0814デフォルトの名無しさん
2010/08/30(月) 21:41:24C# と VB.NET の違い以上に違うし、VB.NET と C++/CLI 以上に違う
要するに、MS が作った他の .NET 系言語とは似たところがほとんど無い
0815デフォルトの名無しさん
2010/08/30(月) 22:34:270816デフォルトの名無しさん
2010/08/30(月) 23:12:48作ってやったぜって感じがしなくもない
0817デフォルトの名無しさん
2010/09/04(土) 06:21:00Microsoft Researchの技術者あれはどうやって飯食ってんだ?Microsoft に雇われてるんだよね?
研究部門なのか?
まあ多分Microsoft Researchに限る話じゃないんだろうが、Microsoft的には
0818デフォルトの名無しさん
2010/09/04(土) 10:54:280819デフォルトの名無しさん
2010/09/04(土) 11:01:300820デフォルトの名無しさん
2010/09/04(土) 12:02:50MS は世界で一番研究予算使ってる IT 企業。
もちろんそもそも金持ってるってのもあるけど、研究予算比率むちゃくちゃ高い。
0821デフォルトの名無しさん
2010/09/04(土) 12:16:020822デフォルトの名無しさん
2010/09/04(土) 12:47:410823デフォルトの名無しさん
2010/09/04(土) 13:43:280824デフォルトの名無しさん
2010/09/04(土) 17:13:25独占率低いと、業界他社との戦いでいっぱいいっぱい、
独占率高いと、今の業界に的ないから、技術革新で状況ひっくり返されるの畏れて自分で革新する。
NEC も、国内 PC 市場独占でやってた頃は研究に投資してたけど、今はもう・・・
0825デフォルトの名無しさん
2010/09/04(土) 17:33:04let private f (private x : int) (private y : int) : int = x + y
0826デフォルトの名無しさん
2010/09/04(土) 17:46:290827デフォルトの名無しさん
2010/09/04(土) 17:47:27なんかイノベーションってあったっけ?
0828デフォルトの名無しさん
2010/09/04(土) 18:00:140829デフォルトの名無しさん
2010/09/04(土) 18:14:010830デフォルトの名無しさん
2010/09/04(土) 18:30:290831デフォルトの名無しさん
2010/09/04(土) 18:36:350832デフォルトの名無しさん
2010/09/04(土) 19:13:46今じゃ同じ会社だが(NECエレとルネサスは合併しました)。
0833デフォルトの名無しさん
2010/09/04(土) 20:41:47ってくっつけていかないと
世界で戦えずに国内でつぶしあうだけになっちゃうから
さっさとなんとかしてほいい
0834デフォルトの名無しさん
2010/09/04(土) 21:25:23ガラパゴス用語だと言って恥だという奴らもでてくる
0835デフォルトの名無しさん
2010/09/04(土) 22:08:41誰が言ってんだよw
0836デフォルトの名無しさん
2010/09/04(土) 23:45:29日本はソフトウエアに関しては、
ハードウエアのオマケっていう意識が、特に経営層に強いから
たぶん無理じゃないかな。
0837デフォルトの名無しさん
2010/09/05(日) 00:29:05http://resource.renesas.com/lib/jpn/superh/theme/01.html
0838デフォルトの名無しさん
2010/09/12(日) 06:17:260839デフォルトの名無しさん
2010/09/12(日) 10:00:030840デフォルトの名無しさん
2010/09/15(水) 00:06:50WindowsとOfficeで稼いだ金使って研究しまくりだろ
死ぬまでに次の一発を当てないと死ぬw
0841デフォルトの名無しさん
2010/09/15(水) 00:10:270842デフォルトの名無しさん
2010/09/15(水) 01:40:45仮に今後20年ぐらい全てのWindowsとOfficeが失敗し続けたら、不採算部門を切り捨ててIBMみたいになるんじゃね。
0843デフォルトの名無しさん
2010/09/15(水) 02:07:29あの基盤でかい。
デスクトップからクラウドへのシフト起きても開発者の負担少なくまるまる移行できてしまうとか。
0844デフォルトの名無しさん
2010/09/15(水) 04:06:15Microsoft 中年
IBM 老人
0845デフォルトの名無しさん
2010/09/15(水) 04:19:56o でも、これからの MS 支えてるのってひそかに .NET かもしれないよ。
0846デフォルトの名無しさん
2010/09/15(水) 07:58:56NTではじめの頃から見てみれば上はクラウドから下はWP7までよう揃えたと思うよ。
0847デフォルトの名無しさん
2010/09/15(水) 09:22:27今はっていうと、.NET で、3 screens and a cloud で似たようなコードが動くこと。
どっちも、開発者を楽にしてくれてる。
0848デフォルトの名無しさん
2010/09/15(水) 09:42:030849デフォルトの名無しさん
2010/09/15(水) 10:29:540850デフォルトの名無しさん
2010/09/15(水) 13:57:13unix由来のツールが動かしにくい点じゃないかな
今は仮想マシンの普及で動作テストにはたいして問題ないけど
0851デフォルトの名無しさん
2010/09/15(水) 20:19:550852デフォルトの名無しさん
2010/09/15(水) 22:45:130853デフォルトの名無しさん
2010/09/15(水) 23:56:35マ板ならまだしも、ム板なんだから技術面で批判すればいいのに
0854デフォルトの名無しさん
2010/09/16(木) 00:20:480855デフォルトの名無しさん
2010/09/16(木) 00:28:43でもあんまり困んない
0856デフォルトの名無しさん
2010/09/16(木) 02:17:430857デフォルトの名無しさん
2010/09/16(木) 02:32:340858デフォルトの名無しさん
2010/09/16(木) 02:46:16http://stackoverflow.com/questions/1689460/f-syntax-for-p-invoke-signature-using-marshalas
0859デフォルトの名無しさん
2010/09/16(木) 02:50:300860デフォルトの名無しさん
2010/09/16(木) 09:56:27体制マンセーなだけの人もいるようですね
0861デフォルトの名無しさん
2010/09/16(木) 10:15:530862デフォルトの名無しさん
2010/09/17(金) 16:30:330863デフォルトの名無しさん
2010/09/17(金) 20:33:420864デフォルトの名無しさん
2010/09/18(土) 00:27:370865デフォルトの名無しさん
2010/09/25(土) 17:05:45NtCreateProcessを使えば、たぶんforkできる。
そもそもPosixサブシステムならforkもある。
一応ある、という程度の話だけど。
0866デフォルトの名無しさん
2010/10/23(土) 13:56:290867デフォルトの名無しさん
2010/10/25(月) 23:39:110868デフォルトの名無しさん
2010/10/27(水) 21:22:350869デフォルトの名無しさん
2010/10/30(土) 17:25:28検討しているのですが、と聞いたことがある。
F# を知らない部署を5件くらいたらい回しに
されたあげく−>最初にもどるだったので
諦めたわ
0870デフォルトの名無しさん
2010/10/30(土) 18:16:270871デフォルトの名無しさん
2010/10/30(土) 18:37:33そんな問い合わせするんだ!!
「ああ、そうですか?」ぐらいしか言えなくね?w
0872デフォルトの名無しさん
2010/10/30(土) 19:05:42一体何処に電話したんだろ。
何処に電話したとしても、質問内容のほうが酷い。
0873デフォルトの名無しさん
2010/10/30(土) 19:11:250874デフォルトの名無しさん
2010/10/31(日) 10:37:550875デフォルトの名無しさん
2010/10/31(日) 11:07:36俺が電話番でもたらい回しにするわwww
0876デフォルトの名無しさん
2010/10/31(日) 11:26:20やんわりと「おかしい人避け」しないと。
0877デフォルトの名無しさん
2010/11/06(土) 22:20:54どの国のMicrosoftに問い合わせたの?
0878デフォルトの名無しさん
2010/11/07(日) 11:54:110879デフォルトの名無しさん
2010/11/08(月) 00:22:290880デフォルトの名無しさん
2010/11/08(月) 22:24:13・Microsoft Research Shared Source Licence Agreement → Apache License 2.0
http://sourceforge.jp/magazine/10/11/08/0247250
F# PowerPackもApache License 2.0になった。
0881デフォルトの名無しさん
2010/11/08(月) 23:12:31ここ数日のMSの動きが読めん・・・。
0882デフォルトの名無しさん
2010/11/08(月) 23:14:150883デフォルトの名無しさん
2010/11/08(月) 23:29:39今こそもう一度問い合わせるべきだなw
0884デフォルトの名無しさん
2010/11/08(月) 23:35:500885デフォルトの名無しさん
2010/11/08(月) 23:41:530886デフォルトの名無しさん
2010/11/08(月) 23:41:570887デフォルトの名無しさん
2010/11/08(月) 23:44:360888デフォルトの名無しさん
2010/11/08(月) 23:46:440889デフォルトの名無しさん
2010/11/09(火) 00:11:490890デフォルトの名無しさん
2010/11/09(火) 02:12:43そこらへんの事情とか最近のマイクロソフトの動きとか知らない人には奇妙にうつるんじゃね
0891デフォルトの名無しさん
2010/11/09(火) 05:35:26||>> Libre Office PART1 <<<||
http://hibari.2ch.net/test/read.cgi/software/1288792911/
0892デフォルトの名無しさん
2010/11/13(土) 09:10:38msoffice -> オープンドキュメント
みたいに、
java -> オープンVM環境
という流れがあると、思っているのだろうか。
0893デフォルトの名無しさん
2010/11/13(土) 17:31:380894デフォルトの名無しさん
2010/11/14(日) 11:18:02http://www.phoronix.com/scan.php?page=news_item&px=ODc3OQ
>In this blog post by Miguel he shares that F# support will now be distributed by Mono for Linux and Mac OS X.
>There will also likely be F# support for Google's Android and the Nintendo Wii too,
>which are other platforms supported by Mono, and that there may possibly be F# support for
>other Mono platform targets like the Apple iPhone and Sony PlayStation 3.
0895デフォルトの名無しさん
2010/11/15(月) 05:20:36標準規格に合わせただけ
0896デフォルトの名無しさん
2010/11/16(火) 19:57:50それとも、MonoのVMがARMのネイティブコードとして動いてんだろうか。
0897デフォルトの名無しさん
2010/11/23(火) 19:25:11Fortranなる言語に似せて作られたプログラミング言語の名前で、
それで作られたプログラムはMicrosoft .Net Framework上で実行する事ができる。
ところで、Microsoft .Net Frameworkというものは、C#、VB.NET、F#で書くプログラム中から
同じライブラリーを呼び出す事もできるし、C#で書いてコンパイルしたライブラリーをVB.NETから呼び出す事もできる。
今ではほとんどやらないが.Net Frameworkのバージョンが若い頃はライブラリーロジックはC#で、
それを呼び出して操作する画面はVB.NETで、なんて事もやられていた。
F#がメニーコアでのプログラミングに向いているのかどうかは私は知らないが、
単純な並列計算を力技で解かせる事が得意なのであれば、計算ロジックをF#で書いて、
それを呼び出すインターフェース(画面だね)をC#やVB.NETで書くというのはアリ、だと思う。
関数型言語というのは、全てのプロシージャー(手続きを一まとめにしたもの)が「値を返す」言語の事を言う。中学校で習ったよね。
y=f(x)
例えば、f(x)=x^2+5だとすると、C言語では以下のようになる。
double f(double x) {
return x^2+5;
}
これは極端な例だけど、これを
double x, y;
for(x = -1.0; x < 5.0; x += 0.01) {
y=f(x);
}
などとして(後は画面描画機能を加えれば)画面上に二次関数を表示したりできるね。
まぁ、関数型言語なんて言葉は既に意味の無いものになっているのであまり気にしなくても良いだろう。
わざわざ「関数型言語」なんて言葉があるのは、その当時はプロシージャーが値を返さない言語も多かったという昔話でしかない。
(その当時の)BASIC 言語とか。GOSUB(サブにイけ)とかどんだけウホッ良いサブ(ルーチン)かっていう話ですよホント。
「(F#プログラミングを)やらないか」とか言われたらもうそこであなたもF#プログラマーなわけです。
ただ、F#が流行りそうか、と言われたら・・・・ボクには何とも言えない。
F#って何?? | OKWave
http://okwave.jp/qa/q6283983.html
0898デフォルトの名無しさん
2010/11/23(火) 19:31:140899デフォルトの名無しさん
2010/11/23(火) 19:41:070900デフォルトの名無しさん
2010/11/23(火) 20:21:35F# の F は、FunctionalのFで、他からの移植でなくて.NetFrameworkから生まれた言語の中では、
初めて関数型言語の性質を持つという特徴を持っています。ただ、関数型だけではなくマルチ指向
なので、ご注意ください。
0901デフォルトの名無しさん
2010/11/24(水) 00:22:55これはひどい
0902デフォルトの名無しさん
2010/11/24(水) 00:28:46しかし、ANo.1の人は何か他のものと勘違いしていないでしょうか。
・F#はFortranには全く似ていません。言語系統的にはML→Caml→OCamlの流れをくんでいます。
・関数型言語というのは、コンピュータ科学的にはλ計算の概念を基礎とし、関数をファーストクラスのオブジェクトとして扱える言語
というのが広い意味での定義です。値を返さないプロシージャ(手続き)に対して値を返すものを関数と呼んだのとは意味合いが異なります。
C言語プログラマーには馴染みのない型推論とか遅延評価とかの興味深い機能がありますが、
それらが実用上どれくらい役に立つかは何とも言えません。
投稿日時 - 2010-11-03 22:12:48
0903デフォルトの名無しさん
2010/11/24(水) 00:33:03いやいやいや・・・関数型言語が「昔話」なんてのは・・・・
F#ってのはMSが最近出した「関数型言語」であってなんで「昔話」の種類の言語が出てくるのでしょうかね.
それとFortranがF#のもとだというソースがどこなのかも知りたいです.
F#はOCamelがベースになっているってのはMSのサイトにもあるんですが.
実際の関数型言語は実はぜんぜん過去のものではないわけでLispやHaskellも盛んだし,
関数型言語をいじると「再帰」が身につくほかかなりスマートなコードが書けるようになります.
F#に限らず,関数型言語の特徴はなんといっても「副作用」の取り扱いと
「関数そのものをデータとして扱う」という考え方で関数に関数を与えちゃうんです.
「副作用」の代表格は「IO」ですけど,面倒なので割愛.ほかにも
F#は「型推論」とか「静的で強い型付け」なんていう特徴もあるようで正統的な関数型言語みたいですね.
#ほかにも「代入が存在しない」なんていう特徴もあることもがある
関数を値として扱うなんてのは,Cなんかだと「関数ポインタ」,
Perlなんかだと「無名関数」なんてので実現するけど関数型言語は関数そのものをそのまま代入できるわけ
たとえば f(x)=x+1 と定義して map(f, [1,2,3,4]) なんてすると [2,3,4,5] というリストが戻ってくるなんてことができる
第一引数が「関数」にできたりする.foldというタイプの関数が定義しやすいのも特徴かな
どうしてこういう言語を考えるのかという問題は「副作用」の影響が大きいのかな
関数型言語ってのは「同じものを与えれば同じものがもどってくる」(大雑把に言えば「副作用がない」ってこと)
ってのがベースにあって,こういう風になっていると違う環境で計算しても同じものが戻ってくるわけで
そうであれば「後で合体させる」ときに便利なのは分かるでしょう?
あとは関数を連結しやすいのです.いわゆるパイプです.
投稿日時 - 2010-11-03 21:53:31
0904デフォルトの名無しさん
2010/11/24(水) 01:34:17どうしてこんなに読みにくいのだろう?
0905デフォルトの名無しさん
2010/11/24(水) 01:37:050906デフォルトの名無しさん
2010/12/23(木) 00:49:50int[] map(Action<int> func,params int[] prms){
return (from i in prms select func(i)).ToArray();
}
var rslt = map(f,1,2,3,4,5);
こっちのが見やすくないか…
0907デフォルトの名無しさん
2010/12/23(木) 01:49:300908デフォルトの名無しさん
2010/12/23(木) 12:46:00http://blogs.msdn.com/b/dsyme/archive/2010/12/22/monodevelop-plugin-for-f-now-available.aspx
0909デフォルトの名無しさん
2010/12/23(木) 13:37:370910sage
2011/01/02(日) 17:55:38C#経験者がF#をみにつけるためにはどちらの本が最適でしょうか。
0911デフォルトの名無しさん
2011/01/02(日) 20:14:07プログラミングF#は良書ですよ。他はダメダメ
0912デフォルトの名無しさん
2011/01/02(日) 21:01:200913デフォルトの名無しさん
2011/01/03(月) 01:32:34Real World Functinal Programmingも良書。
0914sage
2011/01/03(月) 14:31:03確かにプログラミングF#は良さそうですが、
私は関数型とか全然分からなくて少し不安です。
目次を見る限り実践F#は関数型初心者にも理解しやすいような
気がしていますが、どなたかお読みになったかたいるでしょうか。
0915デフォルトの名無しさん
2011/01/03(月) 20:40:370916デフォルトの名無しさん
2011/01/18(火) 23:51:03・F#でないと!という利点が見えない
・文法が推測しずらい=書きにくい
0917デフォルトの名無しさん
2011/01/19(水) 01:03:250918デフォルトの名無しさん
2011/01/19(水) 01:04:540919デフォルトの名無しさん
2011/01/19(水) 01:13:242012ではもう少し賢くしてくれよパトラッシュ(´・ω・`)
0920デフォルトの名無しさん
2011/01/19(水) 02:21:34という場所だけじゃなく普通にここは出て然るべきだろ、
というところでも結構IntelliSense動かなかったりするからねえ。
0921デフォルトの名無しさん
2011/01/19(水) 10:38:33今MSが取り組んでるらしいCompiler as a Serviceが完成して、IDE対応がある程度共通化できるようにならないと厳しいと思う。
0922デフォルトの名無しさん
2011/01/19(水) 15:46:330923デフォルトの名無しさん
2011/01/19(水) 18:42:480924デフォルトの名無しさん
2011/01/19(水) 21:46:580925デフォルトの名無しさん
2011/01/20(木) 00:58:29http://tryfs.net/
0926デフォルトの名無しさん
2011/02/07(月) 09:47:06関数型言語全部にいえるんだよな
結局LLみたいなお手軽言語でもないから中途半端だと
0927デフォルトの名無しさん
2011/02/07(月) 10:53:58ちょっと背伸びしてF#を触ってみたが、自分には理解不能だ
でもそれを認めるのは嫌だから、F#が中途半端なせいだということにしておく
単なる「酸っぱい葡萄」ですた(END
0928デフォルトの名無しさん
2011/02/07(月) 14:08:490929デフォルトの名無しさん
2011/02/07(月) 15:04:40研究目的とかゼロから全部自作する場合はそうでもないんだろうけど
0930デフォルトの名無しさん
2011/02/07(月) 18:20:47静的な関数型言語の利点もかなり享受できるのが、F#やscala
0931デフォルトの名無しさん
2011/02/07(月) 18:23:330932デフォルトの名無しさん
2011/02/07(月) 22:11:430933デフォルトの名無しさん
2011/02/07(月) 23:56:40なんか、C#が関数型の特長取り込んで、ほとんどできちゃうような印象があるんだけど。
0934デフォルトの名無しさん
2011/02/08(火) 00:16:06あとは、ML系の(scalaなどより)強力な型推論
0935デフォルトの名無しさん
2011/02/08(火) 07:45:42・パターンマッチング
・ObjectExpression
・AyncWorkflow
・ComutationExpression
・UnitOfMajor
・まともなクロージャー
・TailRecurtion含んだ再帰
・REPL
・discriminated union
・型推論含めていろいろ簡単にかける仕組み
0936933
2011/02/08(火) 09:58:170937934
2011/02/09(水) 00:43:59http://msdn.microsoft.com/ja-jp/library/dd233226.aspx#Y508
scalaのcase classのつもりで、なにを取り違えたのか型クラスと書いてしまった、、、
0938デフォルトの名無しさん
2011/02/09(水) 04:56:31はじめから.netを意識してるし
グルー言語として結構優れてるんだけど
そこが>>935みたいにまったく注目されないんだよなw
.netを利用したお手軽アプリならC#とかLL+OSのapiより簡単に書けるわけだし。
まあguiはC#でやりたいけど・・・w
0939デフォルトの名無しさん
2011/02/09(水) 09:50:350940デフォルトの名無しさん
2011/02/09(水) 09:52:380941デフォルトの名無しさん
2011/02/09(水) 10:02:020942デフォルトの名無しさん
2011/02/09(水) 10:33:510943デフォルトの名無しさん
2011/02/09(水) 10:59:34設置するのにコストがかかるが、あるなら使うわ。
0944デフォルトの名無しさん
2011/02/09(水) 20:19:26動く歩道の建設普及促進になるのが良いと考えるか
無駄なコストだと考えるかだろ
0945デフォルトの名無しさん
2011/02/10(木) 03:54:23乗るまでが何かめんどくさそうだから普通の道で行くわ
ってなりそうだな
0946デフォルトの名無しさん
2011/02/10(木) 07:43:13大変じゃないって人は、言えば作ってくれるんだからそれを使えばいいじゃんってことで平行線だな。
0947デフォルトの名無しさん
2011/02/10(木) 12:21:30.NET4なら入れても良いと思う
0948デフォルトの名無しさん
2011/03/21(月) 11:54:17.560949デフォルトの名無しさん
2011/03/21(月) 11:56:20.38すぐに引っ越すので、前の住居の数メートル隣のコンビニをニュータウンの引越し先に設置しておいてください
ユーザーからのお願いです
0950デフォルトの名無しさん
2011/04/03(日) 15:17:24.83なんだこれすげぇ。
0951デフォルトの名無しさん
2011/04/07(木) 15:05:28.980952デフォルトの名無しさん
2011/04/07(木) 18:12:05.39980だっけ?
0953デフォルトの名無しさん
2011/04/08(金) 00:10:32.38985辺りまで安全。立てるのは995前後でおk。
早く立てすぎると埋めるのがかなり面倒だから。
0954デフォルトの名無しさん
2011/04/08(金) 00:51:55.430955デフォルトの名無しさん
2011/04/08(金) 01:30:12.760956デフォルトの名無しさん
2011/04/08(金) 01:35:20.61Tomas PetricekのReal World Fanctional Programmingは、良さそうだね。
https://twitter.com/murrayondotnet/status/56012406744289280
Robert PickeringのBeginning F#ってどうなんだろう。
どうでもいいが、発行年が2007と2009に集中してるな。
0957デフォルトの名無しさん
2011/04/08(金) 07:57:38.01Real World Functional Programmingは良書(`・ω・´)シャキーン
他のに比べて関数プログラミングって何ぞやってところに多くを割いている。
0958デフォルトの名無しさん
2011/04/12(火) 06:23:48.57個人的に趣味の範囲で、まだ興味持ってるけど
趣味ですら、ちょっと本格的なアプリつくろうって気にはなんないね・・・
メーリングリストとかFShubもコミュも死んでんじゃん?
0959デフォルトの名無しさん
2011/04/12(火) 08:05:45.41今度客先に出すアプリF#でつくってんだが・・・(´・ω・`)
海外は熱いよ!作りやすいよ!
0960デフォルトの名無しさん
2011/04/12(火) 18:49:02.83http://msdn.microsoft.com/fsharp
英米の地域ユーザーグループは活発だけど、
全体のやつはあるのかな
0961デフォルトの名無しさん
2011/04/22(金) 23:24:52.90http://ja.wikipedia.org/wiki/XSP_(Web%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC)
0962デフォルトの名無しさん
2011/04/27(水) 20:16:33.780963デフォルトの名無しさん
2011/04/27(水) 23:28:27.34みんな何つくってるの?
0964デフォルトの名無しさん
2011/04/27(水) 23:39:25.56それも事実なのか、MSR の(MS経営陣に対する)アピール戦略で言ってることなのかいまいちわからない。
なんか、最近のMSRのF#の売り込み方だと、
データ解析&可視化の得意なREPL的な使い方してるのよね。
0965デフォルトの名無しさん
2011/04/27(水) 23:50:58.86といっても今はあくまでもナイスな汎用記述言語としてしか使ってないけど。
金融系の本来の用途としてはDSL的に書けたり関数型ならではで並列を書きやすいってところがポイントかと。これはF#だからというよりもOCamlとかですでにされてるとこだと思うけど。
F#はそれ以外に.NETで強力なライブラリがあったり既存と連携がしやすいこと、F#ならではの言語仕様でいろいろと開発がしやすいことなど技術者さえ確保できるならほとんどの分野で有効だと思うんだけどなー
0966デフォルトの名無しさん
2011/04/28(木) 10:48:18.71保守できるのかってあたりできびしいものが……
0967デフォルトの名無しさん
2011/04/28(木) 15:00:53.64その時はC#と同じようなコードの書き方してるかもしれないけれどだんだんF#っぽいコードになってけばいいと思う。
そうするだけの価値はあるよ。生産性とか的に。
0968デフォルトの名無しさん
2011/04/28(木) 15:01:39.230969デフォルトの名無しさん
2011/04/28(木) 23:49:36.39そりゃ使い方次第だろうけど、そういうポテンシャルを持ってんの?
0970デフォルトの名無しさん
2011/04/29(金) 00:25:36.43両方あまり知らないんだけど、俺みたいなド素人にでもパッと見で分かる
ようなとこは
・型推論がC#より強力。
・1..10 とか 'A'..'z'とか書ける(C# だとEnumerable.Range()とか使うと思う)
・組み込みで並列計算や非同期計算の機能がある。
・強力な型推論とあいまって、タプルがLLなみに使いやすい。
単に("this", 1)と書けばよくて、string * intの直積型(タプル)と
推論してくれる。値として返す場合も型宣言とか要らない。
・同様に、リストやシークエンスのリテラル表記やリスト内包が可能で
LLなみに使いやすい。
関数的なconsリストがサポートされていて再帰処理との相性もいいんだけど
これは関数型を知らないと良さが多分分からない。
・その他パターンマッチ等関数型特有の機能が色々便利、ただこれも関数型を
知らない人は、使ってみないと多分良さが分からない。
0971デフォルトの名無しさん
2011/04/29(金) 00:46:04.20C# と F# 両方覚えてそれぞれ得意な場面で使えば生産性上がる
くらいのものだと思うんだけど。
0972デフォルトの名無しさん
2011/04/29(金) 02:01:34.24(その点でC#はIDEでうまく補完出来ない言語要素は入れないようにしてる感もある)
単純なコードの字面だけから測ってF#のほうが上とは
生産性が尺度の場合は言えないなあ。
0974デフォルトの名無しさん
2011/04/29(金) 17:18:22.210975デフォルトの名無しさん
2011/04/29(金) 17:21:54.99*型推論:
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#に起こるに違いない!と言うのも本当かもしれない。
0976デフォルトの名無しさん
2011/04/29(金) 17:46:43.47ScalaとF#の比較は乙と言いたい
0977デフォルトの名無しさん
2011/04/29(金) 18:45:21.30C#→F#は起こらないとおも。
0978デフォルトの名無しさん
2011/04/29(金) 18:59:43.540979デフォルトの名無しさん
2011/04/29(金) 19:02:37.27一時期はスクリプトとして使う分にはそこそこよかったんだが
今はpowershellがあるし…
うーむ
0980デフォルトの名無しさん
2011/04/30(土) 08:36:37.52でもC#のほうがF#よりとくいにできるってとこあんまなくね?
partial classとかはちょっと便利かと思うけど。
>972
IDEサポートはC#のほうが上だね。
リファクタとか参照してるところ一覧とかクラス名、メソッド名で一覧からジャンプとか。
でもVSのエクステンションで同じような機能を使えるのもあったから実際使っててそれほど困ってもない。コードの書き方の違いにもよってるのかな。
0981デフォルトの名無しさん
2011/04/30(土) 19:16:49.600982デフォルトの名無しさん
2011/04/30(土) 19:33:54.53C#が年々改良されていっている以上、F#の便利な機能はどんどんC#へ移植されて
いくんじゃないかと思っている。
なので、C# 6.0くらいになれば、もう汎用言語としてのF#のメリットは消えてるのではないかと妄想。
もちろん、関数型言語としての棲み分けはできるだろうけど。
0983デフォルトの名無しさん
2011/04/30(土) 20:42:58.860984デフォルトの名無しさん
2011/04/30(土) 20:49:28.51MSリサーチ臭の有無はいまだになくなってないし、そこが棲み分けのポイントじゃないかな。
F#の方が先に色々新しい試みしてて、
C#の方が時間かけてより良い形になってから新機能入れてる感じ。
0985デフォルトの名無しさん
2011/04/30(土) 23:39:43.06クラスベースをメインとするC#では完全な型推論が実装できない事は証明されているし
代数データ型、パターンマッチ、モナドなんかを導入するのも不可能か、不自然な
構文になっちゃうんじゃないかな。
C#4.0ではdynamic型が導入されるしC#は今後は動的な言語の利点を取り入れる形に
なるんじゃないかな。
0986デフォルトの名無しさん
2011/04/30(土) 23:55:01.900987デフォルトの名無しさん
2011/05/01(日) 00:06:46.98普通、古いほど悪習が残るだけで。
0988デフォルトの名無しさん
2011/05/01(日) 00:13:52.09正直、F#はあまりOCamlを引きづらなくても良かったんじゃないかと思う。
あと
> C#は今後は動的な言語の利点を取り入れる形になるんじゃないかな。
これは的外れ。
0989デフォルトの名無しさん
2011/05/01(日) 00:39:24.72C#がC++とかJavaから結構練り直してる部分あるのに対して、F#はOCaml過ぎ。
研究用言語をあまり練ってもしょうがないし。
F#を製品化するとか、作り始めた当初は思ってもなかったんだろうけど。
0990デフォルトの名無しさん
2011/05/01(日) 00:50:08.49> > C#は今後は動的な言語の利点を取り入れる形になるんじゃないかな。
> これは的外れ。
かまわん続けろ
0991デフォルトの名無しさん
2011/05/01(日) 01:25:36.87Scalaとよく似てるよね。偉い人はそれがわからんのですけど。
ジェネリクスや型推論、クロージャなど関数型言語の利点は昔から着々と取り入れられて
来たけど、だんだん限界だよね。型推論の制限は取れないままだし、そのせいで匿名関数も
微妙だし、FParsecのようなパーサーライブラリはHaskellやOCamlでは昔からあったけど
C#では永遠に無理だろうね。
0992デフォルトの名無しさん
2011/05/01(日) 01:54:31.340993デフォルトの名無しさん
2011/05/01(日) 02:47:57.29【.NET】F#について語れ2【OCAML】
http://hibari.2ch.net/test/read.cgi/tech/1304185609/
お待たせしました。やっと建てられた・・・
0994デフォルトの名無しさん
2011/05/01(日) 03:28:07.01このスレが急に盛り上がってちょっと嬉しい
0995デフォルトの名無しさん
2011/05/01(日) 08:38:33.21レス数が950を超えています。1000を超えると書き込みができなくなります。