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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
MSResearchから出てきた.NETで使える関数型言語のひとつF#
OCAMLの流れを汲むこの言語、いろいろと面白そうなことができそう。
まだまだ英語の情報しかないこの言語について、幅広く語れ。

http://research.microsoft.com/fsharp/fsharp.aspx
2デフォルトの名無しさん:2007/08/02(木) 14:06:09
J#の間違いじゃね?
3デフォルトの名無しさん:2007/08/02(木) 14:08:03
F# のスレっていつの間にかに落ちてたのか
需要無いんかね
4デフォルトの名無しさん:2007/08/02(木) 14:14:43
おおお!!ついにきた!
5デフォルトの名無しさん:2007/08/02(木) 14:22:09
レスの数わずか9で終わったスレ:

>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で組むところが多い
6デフォルトの名無しさん:2007/08/02(木) 14:34:03
ここは6で終わりか
7デフォルトの名無しさん:2007/08/02(木) 14:35:34
7まではいく
8デフォルトの名無しさん:2007/08/02(木) 14:40:07
昔あったF#スレは190レス位で落ちた。
他の関数言語スレも過疎ってるし、単独スレはきついだろうな。
9デフォルトの名無しさん:2007/08/02(木) 14:46:43
せめて、F#〜J#について語れ、とセットにしてはどうだろう?
10デフォルトの名無しさん:2007/08/02(木) 14:48:04
       |
   \  __  /
   _ (m) _ピコーン
      |ミ|
   /  .`´  \
     ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    (・∀・∩< C丼以外の#言語を語れ
    (つ  丿 \_________
    ⊂_ ノ
      (_)
11デフォルトの名無しさん:2007/08/02(木) 14:48:10
>>9
G# H# I# ってどんな言語?
12デフォルトの名無しさん:2007/08/02(木) 14:50:41
> H#

目立言語
13デフォルトの名無しさん:2007/08/02(木) 14:59:59
んー?こんな言語できてんだ。
そのうちMSはA#からZ#まで26種類の駄言語を作りかねんな
14デフォルトの名無しさん:2007/08/02(木) 15:01:47
工エエェェ(´д`)ェェエエ工工
15デフォルトの名無しさん:2007/08/02(木) 15:03:32
先にF++を作れよ。

ところでやっぱりドトネト専用言語?
16デフォルトの名無しさん:2007/08/02(木) 15:05:10
>13
昔、そういう1文字言語のリストをどっかで見た覚えが・・・
17デフォルトの名無しさん:2007/08/02(木) 15:26:19
OCamlって具体的にどういう分野が得意なの?なんかおもしろいネタある?
18デフォルトの名無しさん:2007/08/02(木) 15:39:42
F#ってなんだ?
誰か三行で説明してくれ
19デフォルトの名無しさん:2007/08/02(木) 15:40:34
20デフォルトの名無しさん:2007/08/02(木) 16:02:16
メインフレーム用 JCL# とかどうよ?
21デフォルトの名無しさん:2007/08/02(木) 16:15:05
22名無しさん♯:2007/08/02(木) 18:16:21
新スレ記念にState Monadを作ってみましたよ。( ゚д゚)ノ

#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
23デフォルトの名無しさん:2007/08/02(木) 22:52:49
http://ja.doukaku.org/28/
これどうやればいいのかわからない。誰かヒント下さい。
リフレクションつーことは
http://research.microsoft.com/fsharp/manual/fslib/Microsoft.FSharp.Reflection.html
これを使うんだろうけど・・・正直さっぱりわからん。

ていうか、俺能力無さ杉。

>>22
おお!!使う機会あったら使わせてもらいます。
24デフォルトの名無しさん:2007/08/02(木) 23:05:42
コールスタック見れば楽勝でしょ
25デフォルトの名無しさん:2007/08/02(木) 23:21:28
>>24
うーん。そういうのあんましよくわからないんだわ。
でもがんばってみる。ありがとう!
26デフォルトの名無しさん:2007/08/03(金) 01:03:23
C#のをもろパクってこういうのやってみているんだけど常に
_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()
27デフォルトの名無しさん:2007/08/03(金) 01:13:53
スタックフレームの浅いのはインデックスの大きいところに入ってるでしょ
28デフォルトの名無しさん:2007/08/03(金) 02:11:10
>>27
インデックスってどのインデックス?(GetMethod ?のところ?)
というか、やっぱりStackTraceよくわからない。
29デフォルトの名無しさん:2007/08/04(土) 16:16:58
F#ってmixinできんの?
30デフォルトの名無しさん:2007/08/05(日) 04:22:22
F#のFってFortranのF?
31デフォルトの名無しさん:2007/08/05(日) 05:20:29
function
32デフォルトの名無しさん:2007/08/05(日) 11:30:39
fuck you
33デフォルトの名無しさん:2007/08/05(日) 19:12:51
fuck me

>>30
違います。弄って見れば分るけどFortranとは別物
34デフォルトの名無しさん:2007/08/05(日) 19:39:10
Formula
35デフォルトの名無しさん:2007/08/05(日) 21:48:01
MS による壮大な fiction
36名無しさん♯:2007/08/06(月) 08:16:02
当たり前といったら当たり前だけど、guardがきちんと動いた。

#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
37デフォルトの名無しさん:2007/08/06(月) 10:02:31
>>36
完全に記法の問題だけど、seqの後の{ }がやっぱキモい
38デフォルトの名無しさん:2007/08/06(月) 10:16:25
このスレはのびない。
39デフォルトの名無しさん:2007/08/06(月) 14:15:14
夢にF#が出てきてびびった
40デフォルトの名無しさん:2007/08/06(月) 14:30:57
F#チラッといじてるが、これかなりいいんじゃね?
でかいアプリ作ったときの安定性がどうだか気になるけれど、使いこなせばC#よりはるかにGenericプログラミングできて生産性があがりそう。
VSでの使いかってもまぁまぁだし。
41デフォルトの名無しさん:2007/08/06(月) 14:37:23
よく知らないんですが、
40の意見って何てアストロターフィング?
42デフォルトの名無しさん:2007/08/06(月) 14:51:56
関数型言語が理解できないのなら黙っとけ
43デフォルトの名無しさん:2007/08/06(月) 17:11:39
.NETのgenericsって高階型が使えないのが痛い。
44デフォルトの名無しさん:2007/08/06(月) 19:04:22
IOモナドどうやって作ろう?
45デフォルトの名無しさん:2007/08/06(月) 19:25:23
46デフォルトの名無しさん:2007/08/06(月) 19:55:21
>>45
実装じゃなくて「入出力する」ということはどういう感じにしたら
モナドになるんだ?って話。

>>実は>>22のState Monadほとんどそのままだったりする。

実は別にState Monad使わなくても作れたりするらしい。
もともと抽象的な実装方法というものがあってそれを満たすものがあれば
なんでもいい。(一番自然なのはStateMonad使う方法になるんだろうけど)
47デフォルトの名無しさん:2007/08/06(月) 19:58:31
よく読んだら意味わかんないこと言ってるな。
つまりその実装で一体何を作ったのか?ってこと
(副作用出ないが云々は抜きで)
48デフォルトの名無しさん:2007/08/07(火) 16:12:03
Foundation of F#って良い感じ?
買ってみようかどうか迷ってるのだが。
49デフォルトの名無しさん:2007/08/09(木) 15:28:45
>>48 良いと思うよ
50デフォルトの名無しさん:2007/08/09(木) 16:15:36
F#と本家Ocamlってやっぱ違う??
ttp://oandrieu.nerim.net/ocaml/
ここにあるものってF#で使えますかね??特にGsl。
51・∀・)っ-○◎●:2007/08/10(金) 02:03:12
岡村
52デフォルトの名無しさん:2007/08/10(金) 08:36:23
OCamler
53デフォルトの名無しさん:2007/08/16(木) 08:27:50
見事に過疎ったな。
54デフォルトの名無しさん:2007/08/16(木) 11:06:15
(´∀`∩)↑age↑
55デフォルトの名無しさん:2007/08/16(木) 14:00:58
⊃・ ・〃 |age|
56デフォルトの名無しさん:2007/08/16(木) 21:35:20
Windows を使っている層と OCaml を使っている層は相容れない感じがするからねえ…
57デフォルトの名無しさん:2007/08/17(金) 12:07:05
F#perになろうとおもってるんだが、いまやってるC#の仕事が落ち着かん(´;ω;`)…
58デフォルトの名無しさん:2007/08/17(金) 21:33:53
ていうか、OCamlって実はユーザ少ないのか?
Scheme >>> OCaml > Haskell
ぐらいかと思っていたけど
実は
Scheme >>> Haskell >> Ocaml
なんじゃまいか
59デフォルトの名無しさん:2007/08/17(金) 21:37:23
もしそうなら現在においては
OCaml >>>>>> F#
なのでOCamlユーザの絶対数が少ないのならF#使いの数は・・・。
60デフォルトの名無しさん:2007/08/18(土) 01:51:41
nagoyaでやれ
61デフォルトの名無しさん:2007/08/18(土) 15:02:24
>>58
Schemeをネタに優越感に浸ってる香具師はよく見かけるが
そういう香具師が仕事で使ってるのはJavaだったりするし
小物ツールはRubyで書いてたりするのがほとんどな希ガス
62デフォルトの名無しさん:2007/08/20(月) 09:12:36
Matrix,LinearAlgebraライブラリに固有値計算の関数ってある?
探しても無いからこれはMatlabあたりと連携させる必要があるのかなぁ。
63デフォルトの名無しさん:2007/09/01(土) 13:43:37
あげ
64デフォルトの名無しさん:2007/09/02(日) 14:01:50
LINQをTECPreviewじゃない正式版として使えるのはいつごろでしょうか?
65デフォルトの名無しさん:2007/09/02(日) 17:35:21
>>64
FLinqサンプルが、May 2006 CTPじゃなくて.NET 3.5 Beta2(以降)に対応しないかってこと?
まあ、FLinqはあくまで標準ライブラリじゃなくてサンプルだから、対応の優先度は低いと思う・・・。
66デフォルトの名無しさん:2007/09/02(日) 17:46:24
>>65 いや、ベータじゃないバージョンでリリースされてるのかということ。
自己責任だとしても製品に使っていいものかどうか。
67デフォルトの名無しさん:2007/09/03(月) 23:14:51
>>66
LINQ自体(.NET 3.5)はまだベータで、RTMは年末頃だけどそういう話?

68デフォルトの名無しさん:2007/09/04(火) 01:15:25
>>67 そういう話。さんくす。
69デフォルトの名無しさん:2007/09/04(火) 14:38:45
全部lazyにしとけば遅延評価として正常に動作するもんどすか?
それともHaskelとかと比べて注意しないといけないとこあり?
70デフォルトの名無しさん:2007/09/28(金) 00:02:20
age
71デフォルトの名無しさん:2007/10/05(金) 07:06:18
普段 Visual C++ で業務アプリ書いている俺が
酔狂で関数言語(関数型言語?)をいじってみようと思うんだけど、
ocaml と haskell とどちらがお勧め?
手続きがたべったりの俺には無理?
72デフォルトの名無しさん:2007/10/05(金) 08:37:50
だから、ドトネッツはクラスベースだって。
7371:2007/10/05(金) 09:24:00
F# 入れてみた。おもしれぇ。
Visual Haskell も入れてみたけど、とっつきにくかった。
http://www.haskell.org/visualhaskell/
そういやなんでも IL 上でつくられてね?
IronPython とか IronRuby とか。
74デフォルトの名無しさん:2007/10/05(金) 09:30:50
J#は?
75デフォルトの名無しさん:2007/10/05(金) 09:32:03
JAVAとC#どちらが優れているか教えてください Part2
ttp://pc11.2ch.net/test/read.cgi/prog/1189919634/196

いまのオープンソースの流れから考えてもC#は数年後には今のJ#と同じ道を辿る。

利潤追求の激しい企業が本来ならば仲間にしなければならない開発者までも食い物に
していることも分からず、M$マンセーしている奴は頭を齧られ過ぎて考えることも出来ない
くらいに脳みそがなくなっているんだろ。可哀想だよ。
76デフォルトの名無しさん:2007/10/05(金) 09:52:10
>>71
はじめはOCamlで、慣れてきたらHaskellもやってみるのがよろしいかと。

OCamlだけだと遅延評価とか関数合成あたりが学びづらいし、
Haskellだけだと再帰とかモジュールシステムあたりが学びづらい。
77デフォルトの名無しさん:2007/10/05(金) 10:01:19
____________________________
         (^o^)ノ オワタ   三┌(^o^)┘オワタ          /|
         ノ( ヘヘ       三 ┘>     三 ┌(^o^)┘オワタ | ミ
   (^o^)ノ オワタ        三 ┌(^o^)┘オワタ    ┘>/   |   ミ \( ^o^)/ オワタ
   ノ( ヘヘ    (^o^)ノ オワタ  三  ┘> ┌(^o^)┘オワタ    /    ミ  |_/
          ノ( ヘヘ           三  ┘>  /   / |       ノ ノ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|   /   |  ミ
                                    |  /    |  ヽ(^o^ )ノ オワター      ミ \( ^o^)/ オワタ
_____________________|/      |  \(\ノ             ミ |_/
                              |        |         ミ          ノ ノ
                              |        |        ミ \( ^o^)/ オワタ
  ______    ______      |        |            |_/
  ||//        .||   ||//       ||     │        |            ノ ノ
  ||/       .||   ||/          ||     │        |
  ||        ||   ||._____________ ...||     │        |              ミ
  ||        ||   |||  (^o^)  |  ||     │        |               ミ\(^o^)/ オワタ
   ̄ ̄ ̄ ̄ ̄ ̄     ̄ ̄ ̄ ̄ ̄ ̄      |        |                  ┘|

78デフォルトの名無しさん:2007/10/05(金) 10:02:50
Adobe『AIR』は、「MSによるオフィスアプリ支配」を崩すか
ttp://wiredvision.jp/news/200709/2007090520.html
79デフォルトの名無しさん:2007/10/05(金) 10:31:33
80デフォルトの名無しさん:2007/10/05(金) 10:57:46
J#って何のためにあるの?
ttp://pc11.2ch.net/test/read.cgi/tech/1179314479/l50
8171:2007/10/05(金) 12:58:50
>>75
C# はどうなるかわかんないけど、
C++/CLI の出来はいいと思うよ。
Managed C++ でいろいろと改良点が指摘されて
それが十分に生かされていると思う。
82デフォルトの名無しさん:2007/10/05(金) 13:01:43
基地外にマジレス不要
83デフォルトの名無しさん:2007/10/05(金) 17:17:39
うほ。
System.Windows.Forms とか見えてる・・・
もしかして俺が C# で書いたフォームを
Haskell から呼び出したりできるのか??
84デフォルトの名無しさん:2007/10/05(金) 17:18:14
Haskell じゃなかった、 F# だた。
両方並行していじってると頭がおかしくなるみたい。
85デフォルトの名無しさん:2007/10/05(金) 18:05:32
出来るお(´・ω・`)
86デフォルトの名無しさん:2007/10/05(金) 20:09:58
F#速いお
OCamlよりも速いお
立ち上がってからの話だけど・・・
ちょっと言ってみたかっただけだお
87デフォルトの名無しさん:2007/10/05(金) 20:52:17
Python並みにコードが短く、C#のように実行が速い
ttp://www.strangelights.com/blog/archive/2007/06/17/1588.aspx
88デフォルトの名無しさん:2007/10/05(金) 23:21:11
C#って速いか?
C#って速いか?
C#って速いか?
C#って速いか?
C#って速いか?
89デフォルトの名無しさん:2007/10/05(金) 23:29:39
遅いのはGDI+
90デフォルトの名無しさん:2007/10/06(土) 01:02:09
初回起動時のコンパイルもかな
91デフォルトの名無しさん:2007/10/06(土) 07:23:48
>>88
速いと思うよ。 >>90 が言うように初回起動時に
JITコンパイラのようなものが働いているみたいで、
確かにデバッグ・実行繰り返しているときに
いらいらすることがある。デバッグコードだから
かもしれないけど。

あと、実際に多用するかどうかはともかくとして、
C#だとどうしても速く書けない部分があっても
DLLの呼び出しが簡単なので、Cやアセンブラで
書いたコードを呼び出せるし。Javaのネイティブ
メソッドよりも簡単に。
92デフォルトの名無しさん:2007/10/06(土) 09:43:34
>>91
interopでのDLLやCOMの呼び出しは確かに簡単だが、マーシャリングの
コストが高いので細切れにCの小さなコードを呼ぶような使い方はすべきでない。

そういうことがしたいなら、むしろC++/CLIを使うべきだろう。
93デフォルトの名無しさん:2007/10/06(土) 11:46:01
>>92
C#のP/InvokeとC++/CLIの暗黙のP/Invokeのマーシャリングにかかるコストは実は差がない。
違いはC++/CLIではデフォルトでSupressUnmanagedCodeSecurityAttributeが付加され、
C#は付かないということ。
C#のP/Invokeに[SupressUnmanagedCodeSecurity]をつけると途端に速くなるから試してみるといい。
94デフォルトの名無しさん:2007/10/06(土) 17:26:28
UTF-8 で書いておけば日本語もおkなんだね。
95デフォルトの名無しさん:2007/10/06(土) 17:43:08
>>93
それってセキュリティ的にどうなの?
96デフォルトの名無しさん:2007/10/06(土) 17:57:10
>>95 セキュリティって文字列に反応しているようだけど、
この設定はセキュリティ関連のチェックを事前にできるように
するかどうかというだけの設定じゃなかったっけ?

ドトネトなプログラムは実行時にたとえば「ディスクへの書き込み
はしちゃだめだからね」なんていうセキュリティ上の制約を
つけて実行することができるようだけど、プログラムが全体として
その制約を満たしているかどうかを実行開始前にチェックできるように
するか、実行時に「おいおい、書いちゃダメだってば」って
例外を出すようにするかって違いじゃないの?

F#の話から外れて申し訳ないが。
97デフォルトの名無しさん:2007/10/17(水) 01:14:32
ほっしゅほっしゅ

入れてみたよ〜。なんだか面白そうだ。
98デフォルトの名無しさん:2007/10/18(木) 04:04:22
>>97
ttp://blogs.msdn.com/dsyme/archive/2007/10/17/s-somasegar-on-taking-f-forward.aspx
うは、Luke HobanがF#チームに異動か。

まあOrcasでの仕事もほぼ終わったところだろうし、いいタイミングなのかも。
9998:2007/10/18(木) 04:05:26
ごめん、>>97は関係ない。
100名無しさん♯:2007/10/18(木) 21:18:06
ttp://blogs.msdn.com/somasegar/archive/2007/10/17/f-a-functional-programming-language.aspx

これって、F#を製品化するって話なの?
表現が微妙でそう読み取れないんだけど、反響を見るとそういう扱いになってる・・・。(´・ω・`)
101デフォルトの名無しさん:2007/10/19(金) 07:33:45
Iron ほげほげといい、F# といい、
Visual Studio で何でもありという感じだなぁ。
その一方で、 Visual Studio 2008 Beta 2 見ると
J# がなくなっている・・・
俺としては継続してほしかった。
さらにライセンス的に無理なんだろうけど
JDK 1.6 にも対応してほしかった。
いまは JDK 1.1.4 相当だから。
スレちがいでごめん。
102デフォルトの名無しさん:2007/10/20(土) 05:01:18
wikipedia の F# のページ http://ja.wikipedia.org/wiki/F_Sharp
には F# は科学計算用途に適した言語であるといえる。
F# は、低級だが高速な数値計算言語 (Fortran など) と、
高級だが低速な言語 (Mathematica など) の両方の特徴をもつ。

って書いてあるんですけど、 F# によって matlab や R 言語で処理するような
事柄にむいていますか?向いているなら今から習得して修論に使おうと思って
いるんですけど...
103102:2007/10/20(土) 05:13:28
後、同ページ http://ja.wikipedia.org/wiki/F_Sharp
には、 F# は異なる言語に容易にアクセスすることができ、
LAPACK や FFTW などといったライブラリの利用が容易である。

と書いてありますが、これは、 C 言語など低級の言語のみならず、 matlab や
mathematica や R 言語などにもアクセスする事は可能なんでしょうか?
104デフォルトの名無しさん:2007/10/20(土) 12:13:22
言語による
105デフォルトの名無しさん:2007/10/20(土) 17:38:14
Cにはアクセスできるよ。
ほかのはCからいけるならとりあえずラッパコード書けばいけんじゃね?
106デフォルトの名無しさん:2007/10/20(土) 18:28:41
matlab や R はインターフェイスがネイティブの C だよね?
なので C++/CLI でラッピングすればドトネトの世界から
アクセスできる。当然 F# からもアクセスできる。
でもあんまり F# 使う意味ないんじゃね?

俺にとっての F# を使う意義と言えば、
Visual Studio の中で仕事しているふりをしながら
現実逃避できるというところだろうか。
107102:2007/10/21(日) 23:58:45
>>105>>106
確かに、そうなると F# 使う意味なくなりますね...
それはそうと、 >>102

F# は科学計算用途に適した言語であるといえる。
F# は、低級だが高速な数値計算言語 (Fortran など) と、
高級だが低速な言語 (Mathematica など) の両方の特徴をもつ。

っていう記述は本当なのですか?もし本当なら、院生にとっては
夢のような言語のような気がするんですけど...
108デフォルトの名無しさん:2007/10/22(月) 01:29:32
>>107
F#というよりベースになってるOCamlの特徴かな。
それなりの訓練は必要だが関数型言語はある種の科学技術計算に向いてる。
ただ、これを高級と呼ぶかどうかは知らんし、手続き型がいい場合もある。
関数型言語の多くは遅延評価で弱い型付けであるが、
OCamlは正確(遅延評価でないという意味)で、推論でしっかり型付けされるため、
コンパイルが可能でパフォーマンスがいい。
問題はまだ新しい言語でライブラリが充実してないところ。
109デフォルトの名無しさん:2007/10/22(月) 10:41:59
>>107
どっかのページに大学院生でOCaml使っていて、こんなに(・∀・)イイ!!言語なのになんでマイナーなんだろうとかいう記述があったぞ
>>108
F#なら.NETのライブラリが使えるお
110デフォルトの名無しさん:2007/10/23(火) 21:05:48
正格だよね
111デフォルトの名無しさん:2007/10/23(火) 23:34:50
>>108
> OCamlは正確(遅延評価でないという意味)
正格だボケ
112デフォルトの名無しさん:2007/10/24(水) 00:24:58
ボケはお前だ
113デフォルトの名無しさん:2007/10/24(水) 05:59:26
VC# expressしか持ってないんですが
この場合VS上でのF#プログラミングって使えるんですかね
114デフォルトの名無しさん:2007/10/24(水) 07:45:50
Expressは駄目。たしか、IronPythonのも駄目だった。
いまお金かけないとすると、VS2008のbetaですかね。
115デフォルトの名無しさん:2007/10/24(水) 09:38:06
2008 Beta2 Standardがおすすめ
116デフォルトの名無しさん:2007/10/24(水) 10:25:49
F#はじめました。クロージャもどきを作ってみましたが、
let 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)) 
117デフォルトの名無しさん:2007/10/24(水) 13:42:18
>>116
3行目で if n < 1 then rev v が定石かと思われ。

(makeclr v (n - 1)) @ [fun () -> pr n] は効率の面でおすすめできない。(´・ω・`)
118デフォルトの名無しさん:2007/10/24(水) 14:37:10
>>117
ありがとう。最後にまとめて反転させたほうが早いわけですね。
末尾再帰になってなかったのでそうしたら反転の必要もなくなりました。
最初は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 ;;
119デフォルトの名無しさん:2007/10/24(水) 15:11:11
>>118
ループとしてのfor, whileはほとんど使いません。(つーか、構文忘れてるし・・・。)
ただし、内包表記のforはよく使います。

let makeclr n =
 [ for i in [1..n] ->
   fun () -> printf "closure %d\n" i ]

でもまあ、最初のうちは再帰で解決する習慣を身につけるべきかと。(´・ω・`)
120デフォルトの名無しさん:2007/10/24(水) 15:12:06
F#のメリットってなんですか?
C#より優れてるところ、劣ってるところはなんですか?
F#にできてC#にできないことってありますか?
121デフォルトの名無しさん:2007/10/24(水) 16:04:01
>>119
こういうforの使い方があるのか。おいしくいただきまます。
122デフォルトの名無しさん:2007/10/24(水) 20:08:41
あかん・・・手続き型べったりの俺には
簡単なコードで頭の体操するのが精いっぱい。

しかし使い慣れた Visual Studio で動くので
なんとなく使えてる気になるけど。
やっぱり理論的な基礎をしっかりとやってない
専門学校上がりのコーダーには扱えないのかね。

Emacs における Emacs Lisp のように、
既存のネイティブ or ドトネトなプログラムの
マクロ言語としておもしろい?とかオモタけど、
妄想だけにしときます。
123デフォルトの名無しさん:2007/10/25(木) 01:28:33
>>118を1行で。

[1..10] |> List.map (fun n () -> printf "closure %d\n" n) |> List.iter ((|>) ())
124デフォルトの名無しさん:2007/10/25(木) 01:30:32
暗号にしかみえんがみなさんはこういうのにメリット感じるの?
125デフォルトの名無しさん:2007/10/25(木) 01:55:17
Microsoft、関数型言語F#をVisual Studioに統合へ――開発者からはおおむね好意的な反応
http://opentechpress.jp/developer/07/10/24/0310251.shtml
126デフォルトの名無しさん:2007/10/25(木) 01:58:35
手を広げすぎ
127デフォルトの名無しさん:2007/10/25(木) 02:12:00
let flip f a b = f b a
let delay f = fun () -> f

let _ = [1..10] |> List.map (printf "closure %d\n" |> (delay >> flip)) |> List.iter ((|>) ())
128デフォルトの名無しさん:2007/10/25(木) 04:27:16
right to leftの方が読みやすいかな。

let _ =
 List.iter ((|>) ()) << List.map (flip << delay <| printf "closure %d\n") <| [1..10]
129デフォルトの名無しさん:2007/10/25(木) 08:26:45
型推論ってなんですか?
130デフォルトの名無しさん:2007/10/25(木) 09:46:24
型を推論してくれるんです。
131デフォルトの名無しさん:2007/10/25(木) 09:59:05
やけに賑やかDaNa
132デフォルトの名無しさん:2007/10/29(月) 22:11:15
OCaml は整数型と実数型で足し算の演算子すら違って面倒だという話を聞いたことがありますが,本当ですか?
F#もそうなってるんですか?
133デフォルトの名無しさん:2007/10/29(月) 22:16:40
整数の演算子 :
+ - * /

実数の演算子 :
+. -. *. /.
134デフォルトの名無しさん:2007/10/29(月) 22:47:06
めんどくさ
135デフォルトの名無しさん:2007/10/29(月) 23:50:47
>>132

> 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
136デフォルトの名無しさん:2007/10/30(火) 10:22:05
>>132
F#では演算子は共通になった。
.NETのサポートするデータ型を全部サポートしなきゃいけないのでこうなったものと思われる。
ただし暗黙の型変換はないので整数+実数の計算は変換が必要になる。

> 3.2 + float 2;;
val it : float = 5.2
137デフォルトの名無しさん:2007/10/30(火) 10:24:25
F#ってVS2008についてくんの?
138デフォルトの名無しさん:2007/10/30(火) 13:41:11
OCamlってフランス製だっけ?
139デフォルトの名無しさん:2007/10/30(火) 15:13:40
そうざます
140デフォルトの名無しさん:2007/11/07(水) 23:39:11
おフランスwww
141デフォルトの名無しさん:2007/11/13(火) 01:04:38
140が見えない
142デフォルトの名無しさん:2007/11/14(水) 00:21:33
なんで?
143名無しさん♯:2007/11/19(月) 14:52:34
F# 1.9.3.4が出ますた。( ゚д゚)ノ

Asyncの実装がまた微妙に変わってますがな・・・。(´・ω・`)
144デフォルトの名無しさん:2007/11/19(月) 16:38:48
おぉ〜

この言語は普及するのかな
145名無しさん♯:2007/11/19(月) 20:25:01
ありゃ、ライブラリのマニュアル、バージョン古いままだ・・・。(´・ω・`)
146デフォルトの名無しさん:2007/11/19(月) 23:47:01
普及するわけないだろwwwwwwwwwww
147デフォルトの名無しさん:2007/11/20(火) 16:06:16
並列計算の需要がものすごく増えてきてるから普及するんじゃないかねぇ
148名無しさん♯:2007/11/20(火) 16:20:04
Async型って、Haskellで

 type Async a = Cont () (Either a Exception)

って脳内変換すれば、unit, bindの実装の意味が理解できることに最近気がついた。

で、ごく一部の方々がActionを使った継続をやけに議論してた意味もようやくわかった。(つД`)
149名無しさん♯:2007/11/20(火) 20:05:10
Eitherじゃぜんぜんダメだった・・・。orz
エラー系の継続を最初からずっと保持してなきゃならんので、結局

 type Async a = (a -> (), Exception -> ()) -> ()

こうするしかないですわ。(´・ω・`)

でも、Asyncってモナド則を満たしてるんかいなという新たな疑問も・・・。
150名無しさん♯:2007/11/20(火) 20:14:12
あ、型コンになってなかった。(´・ω・`)

 data Async a = Async ((a -> (), Exception -> ()) -> ())
151名無しさん♯:2007/11/21(水) 08:05:42
Asyncを単純化するとこんな感じなのかな?( ´・ω・)


#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#で表現するのはめんどいのう。(´・ω・`)
152デフォルトの名無しさん:2007/11/21(水) 13:31:20
関数型言語は図で説明できますか?
フローチャートのように。
それが出来ないと、企業で使うのは難しいと思う。
153デフォルトの名無しさん:2007/11/21(水) 13:48:56
フローチャート(笑)
154デフォルトの名無しさん:2007/11/21(水) 13:53:48
次の質問をどうぞ
155デフォルトの名無しさん:2007/11/21(水) 14:30:48
質問が正確じゃないな。

  「Javaはむずかしすぎて使えません!」とギャグでなく主張する
  ド低脳にとっては関数型言語のほうが簡単なのですか?
  そうでないと、ドカタが使うのは難しいと思う。

こうだろ。
156デフォルトの名無しさん:2007/11/21(水) 14:38:19
おもしろくないよ
157名無しさん♯:2007/11/21(水) 21:33:54
あ、>>151間違えとる。(´・ω・`)

Async.Runは Async<'a> -> 'a にしないとダメなのか・・・。
>>151の実装は flip asyncApp 相当に過ぎないか。
158名無しさん♯:2007/11/22(木) 01:13:05
うーん、やっぱりキャンセルサポートなしでAsync.Runまで作っても複雑になるなあ・・・。

#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まで挑戦するのは無理ぽ。(´・ω・`)
159デフォルトの名無しさん:2007/11/22(木) 12:12:02
1.9.3.6リリース
160デフォルトの名無しさん:2007/11/22(木) 23:56:53
>153-154
図星だったようだね。
161デフォルトの名無しさん:2007/11/23(金) 00:06:19
162デフォルトの名無しさん:2007/11/23(金) 01:28:54
政治的な理由で図が必要なら、Executable UMLでも
使ってれば?
あと>>155が答え。
163名無しさん♯:2007/11/23(金) 12:20:33
CPSだとアピールするよう、>>158のstartをプチ改良。w

let id x = x

let start p = app p (id, (fun exn -> raise exn))
164名無しさん♯:2007/11/23(金) 17:12:31
これはすばらしすぎるwww
ttp://channel9.msdn.com/Showpost.aspx?postid=358968

コメント欄もなかなか熱い。(;^ω^)
165デフォルトの名無しさん:2007/11/24(土) 01:29:29
もうちょっとHaskellよりなOCamlがいいと思う
166デフォルトの名無しさん:2007/11/24(土) 01:46:59
OCamlは副作用に対して寛大で、保守性や開発効率を保ったまま言語仕様を定めるのが忙しくて
165の様な要望に対しては手一杯
167名無しさん♯:2007/11/27(火) 22:37:56
F#のオブジェクト機能をちょっとまじめに使ってみますた。( ゚д゚)
ttp://cid-c42499cb3a347006.skydrive.live.com/self.aspx/Public/DLRSample.fs
168デフォルトの名無しさん:2007/11/28(水) 01:53:52
日本語の解説はないの?
htmlは読みにくいからpdfのドキュメントはないの?
169名無しさん♯: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
170デフォルトの名無しさん:2007/11/28(水) 21:07:15
>>169
モンドリアン風なのが気に入ったw
171デフォルトの名無しさん:2007/11/29(木) 01:54:58
F#がC#より優れている点ってあるの?
すべてにおいてC#が優っているように思えるのだが。
172デフォルトの名無しさん:2007/11/29(木) 02:04:46
んじゃC#使えばいいじゃにあか
173デフォルトの名無しさん:2007/11/29(木) 02:06:18
そうだけど何かメリットがあるならF#を使ってみようかと思って。
無いなら使わないけど。
174デフォルトの名無しさん:2007/11/29(木) 04:51:48
F#とC#は使い所が違うんじゃないかな
175デフォルトの名無しさん:2007/11/29(木) 05:38:33
(::)が関数として使えないんだけどそういうもん?
176デフォルトの名無しさん:2007/11/29(木) 20:23:52
F#の機能とかっていずれC#も取り込みそうな気がする。C#って何気に巨大言語だよね。
177デフォルトの名無しさん:2007/11/29(木) 20:49:05
へじたんの夢の固まりだからな
178デフォルトの名無しさん:2007/11/29(木) 21:22:37
C#でできることすべてはF#でできない。
F#でできることすべてはC#でできる。
179デフォルトの名無しさん:2007/11/30(金) 01:29:16
逆だろ
180デフォルトの名無しさん:2007/11/30(金) 01:30:02
逆じゃない。
181デフォルトの名無しさん:2007/11/30(金) 01:41:23
C#、F#でできることの集合をそのままC#、F#と書く
1行目から C# ∩ F# = φ
2行目から F# ⊆ C#

∴F# = φ

アッー
182デフォルトの名無しさん:2007/11/30(金) 01:45:50
aho
183デフォルトの名無しさん:2007/11/30(金) 01:52:06
(C#でできることすべて)はF#でできない。
ではなく
C#でできることにはF#でできないことがある。
という意味なのか
184デフォルトの名無しさん:2007/11/30(金) 01:59:02
仕様書でこういうどちらとも取れる言葉遣いをしていたら揉め事の種になるな
185デフォルトの名無しさん:2007/11/30(金) 02:00:23
F#使ったことないけど、
C#では

var f = i=>i

で型推論が働かず、コンパイルが通らない。
F#ではできる!(=F#でしかできない事)

という認識で良いでしょうか?
186デフォルトの名無しさん:2007/11/30(金) 09:14:42
開発はなに使ってますか?VS2008?
187名無しさん♯:2007/11/30(金) 10:30:03
188デフォルトの名無しさん:2007/11/30(金) 10:50:05
C#で航海関数(なぜか変換できない)かけるのかとこ一時間
189デフォルトの名無しさん:2007/11/30(金) 10:58:20
ハァ?
190名無しさん♯:2007/11/30(金) 18:05:31
System.Linq.ParallelEnumerable
System.Linq.Parallel.Enumerable

まぎらわしい・・・。(´・ω・`)
前者はIParallelEnumerable用、後者はIEnumerable用。
191名無しさん♯:2007/11/30(金) 19:00:00
ParallelEnumerableに、ForAllなんていうAction系の拡張メソッドが。
オリジナルのEnumerableにもこれ付けてほしかったのに。(つД`)
192名無しさん♯:2007/11/30(金) 19:36:06
Parallel.Aggregateはどこへ行った?と思ったら、

 Parallel.For<TLocal>
 Parallel.ForEach<TSource, TLocal>

がその代わりらしい。でも、使い方がちょっとわかりにくい・・・。(´・ω・`)
193名無しさん♯:2007/11/30(金) 20:05:28
>>191のForAllは、inverted enumerationというやつだった。
ForEachのつもりで使うと、順番がバラバラで困ったことになる。

MSDN Magazineできちんと解説してた内容をすっかり忘れてた・・・。orz
ttp://msdn.microsoft.com/msdnmag/issues/07/10/PLINQ/default.aspx
194デフォルトの名無しさん:2007/11/30(金) 23:25:34
195名無しさん♯:2007/12/01(土) 00:16:49
SEQUENTIAL_THRESHOLDがからむと、チューニング(値決め)がむずかしそうですのう。(´・ω・`)
196名無しさん♯:2007/12/01(土) 13:20:31
TPLむずかし杉ワロタw

#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)
197名無しさん♯:2007/12/02(日) 01:01:31
dual coreでのパフォーマンスアップは1.5〜1.6倍といったところでしょうか。
quadで動かしてみたいのう。(´・ω・`)
198名無しさん♯:2007/12/02(日) 23:54:31
F#じゃないけど、こんなのを取りまとめ中。
ttp://cid-c42499cb3a347006.skydrive.live.com/self.aspx/Public/LinqUtils.cs

C#も十分関数的ですのう。(´・ω・`)
199デフォルトの名無しさん:2007/12/03(月) 03:17:53
なんかむずむずする関数名だな。
200デフォルトの名無しさん:2007/12/03(月) 04:41:19
>>198
・Unitは確かにムズムズするな。unit 型と混乱しそう。
・IsEmptyの実装は Enumerable.Count<T>使うより
 Enumerable.Any<T>使った方が良いんでは?
 Count使うと無限リストで死ねる。
 てかAnyがあるからIsEmpty要らん気もするけど。個人的には。
201デフォルトの名無しさん:2007/12/03(月) 09:10:48
C#もラムダ式で再帰を書く方法の改善と末尾再帰の最適化をやってくれるようになったら
関数型っぽく遊べるようになるんだがな。
202デフォルトの名無しさん:2007/12/03(月) 09:14:32
その辺は棲み分けでしょ
.net frameworkって糊を上手く使う所ってことで
203名無しさん♯:2007/12/03(月) 10:49:17
>>200
コメント感謝です。

> ・Unitは確かにムズムズするな。unit 型と混乱しそう。

前は「Lift」って名前にしてたんですが、そっちの方がわかりやすいでしょうか?

> ・IsEmptyの実装は Enumerable.Count<T>使うより
>  Enumerable.Any<T>使った方が良いんでは?

Anyの使い方を知らなかっただけでつ。(´・ω:;.:...
勉強になりますのう。
204デフォルトの名無しさん:2007/12/03(月) 11:17:49
>>203
個人的にはLiftで良いと思う。
ただ、.NET全般として見たときには
Nullableのところで"Lift"を使っちゃってて面倒鴨。

ttp://msdn2.microsoft.com/en-us/library/system.linq.expressions.unaryexpression.islifted(VS.90).aspx

monadがあればこの辺のメタな名前の衝突は回避できるというか統合できるのかのぅ。
205名無しさん♯:2007/12/03(月) 11:29:57
>>204
修正しますた。ついでに使用例も。( ゚д゚)ノ
ttp://cid-c42499cb3a347006.skydrive.live.com/self.aspx/Public/LinqUtilsDemo.cs

> monadがあればこの辺のメタな名前の衝突は回避できるというか統合できるのかのぅ。

monoid派が「Unit, Bindにすべし!」と言い出す悪寒・・・。
206名無しさん♯:2007/12/03(月) 23:16:44
うーん、結局のところ

 かなり必要 → ZipWith
 できれば必要 → Lift (T -> IEnumerable<T> のインターフェイスで)

ぐらいで、他は別にイラネって感じかもしれん・・・。(´・ω・`)
207名無しさん♯:2007/12/03(月) 23:35:51
Cycleは漏れ的にはお気に入りだけど、実際には使わんよなあ・・・。(;´Д`)
208デフォルトの名無しさん:2007/12/04(火) 00:29:38
OCamlは糞言語だな。F#は大丈夫なんだろうな。
209名無しさん♯:2007/12/04(火) 20:11:20
TPLは、TaskManagerPolicyを変えて、ParallelよりもConcurrentライブラリとして使えば便利かもしれん。
でもそれって何てjava.util.concurrent?(´・ω・`)
210デフォルトの名無しさん:2007/12/20(木) 02:46:46
Lisp系に比べるとML系って泥臭いというか、洗練されていない感じがする。頭悪そうな感じ。
211デフォルトの名無しさん:2007/12/21(金) 08:06:21
でも得てしてそういう言語の方が広まったりしない?
212デフォルトの名無しさん:2007/12/21(金) 08:42:24
MLは普及してないだろ。
213デフォルトの名無しさん:2007/12/21(金) 14:10:28
まさに目くそ鼻くそ
214デフォルトの名無しさん:2007/12/21(金) 14:41:19
MS は # シリーズが Z までいったら,
次は $ シリーズを展開してくれると期待している.
215デフォルトの名無しさん:2007/12/21(金) 23:44:56
M$
216デフォルトの名無しさん:2007/12/23(日) 23:59:49
>>210
CL, Scheme, SML, OCaml なんかを比べているのであれば、
どれも大差無い様に見えるけど。歴史的に一番泥臭いのは
CL だろうけど…
217名無しさん♯:2007/12/24(月) 10:52:24
Scalaの言語仕様もよくできてますなあ。
F#よりもHaskellに近い希ガス。
もしかしたら、C# 4.0のヒントもこの中にあるのかもしれん。(´・ω・`)
218デフォルトの名無しさん:2007/12/24(月) 11:24:46
気になる開発プロダクツ
第7回 Scala 2.6.0-final
http://gihyo.jp/dev/serial/01/awdp/0007

初めて名前聞いた.

ところでみんな将来的には業務に使おうと思ってF#とか
関数型言語をいじってるの?
219デフォルトの名無しさん:2007/12/26(水) 03:54:29
Scala、Rubyみたいな言語だなw
220名無しさん♯:2007/12/26(水) 11:42:54
一部で話題になってる論文。
ttp://www.cs.kuleuven.be/~adriaan/?q=genericshk

これをJVM上の言語で実現したのはすごいなあ。

一方、.NETの方では・・・。(´・ω・`)
ttp://www.haskell.org/pipermail/glasgow-haskell-users/2005-January/007603.html
221名無しさん♯:2007/12/26(水) 21:40:07
いちおう動いたけど、なんか間違えてるような・・・(´・ω・`)?

trait 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で汎化した意味がないような・・・。
222名無しさん♯:2007/12/26(水) 21:52:51
しかも、JustとNone。名前の由来が微妙に混ざってる・・・。orz
223名無しさん♯:2007/12/26(水) 22:23:36
あ、こうすればいいのか。(゚∀゚)

 def test[M[_], T, U](a: M[T], f: T => U)(implicit m: Monad[M]) {
  m.bindM(a, (b: T) => m.returnM(f(b)))
 }
224名無しさん♯:2007/12/26(水) 22:50:55
関数を { 〜 } で囲むと戻り値はUnitになっちゃうのか・・・。なるほど。(;`・ω・)
225名無しさん♯:2007/12/26(水) 23:11:49
修正版でつ。

trait 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))
 }
}
226デフォルトの名無しさん:2007/12/27(木) 14:09:13
前、海外でF#使える人の求人あったけどどんなものなのかね?
日本でもかまわんけれど、実際のシステムで使われてるかなど教えてエロイ人
227デフォルトの名無しさん:2007/12/29(土) 14:46:20
>>226
実際は雑用とかだろ
228デフォルトの名無しさん:2007/12/29(土) 14:59:22
このスレ一人しかいないのか知らんけど、過疎ってるからってさすがにつっこむべきかと・・・・
そのコードF#ですか?

>>226
基本的には.netアプリだけど、ASP.NETでスクリプト的に使うんだろうな〜
まあIronPythonもそうだがちゃんとしたフォームデザイナがないとGUIアプリは作りづらいし
当然C#とかVBを置き換わるものではない
ってか常識で考えろ
229デフォルトの名無しさん:2007/12/29(土) 23:12:31
>>228
常識が何をさしてるのか知らんが、別に既存の業務土方アプリ作るのにF#使うことは無いでしょう。
まぁF#のほうが生産性高いとは思うけれど、メンテや技術者の人数から見ても選択されることはないかと。
それよりも自分が見たのは、何かの科学計算に向けての実験的なアプリの作成などに絡む部門だったような。Lispとかの経験でも可とかいってたから何か面白そうなにおいがした。
230名無しさん♯:2008/01/04(金) 22:35:35
Scalaをいろいろと触ってみましたけど、オブジェクトの発想が強すぎて
関数型としては扱いづらいですね・・・。(´・ω・`)

F#の比較対象としては不向きかも。
231名無しさん♯:2008/01/06(日) 21:44:12
fsi --quiet --exec hoge.fs

hoge.fsを実行してそのまま終了。
今までこのオプションを知らんかった・・・。orz

そうなると、DLRの使い道が一気に減ってしまうがな。(´・ω・`)
232デフォルトの名無しさん:2008/01/19(土) 17:56:27
F# 1.9.3.14あげ
233デフォルトの名無しさん:2008/02/02(土) 08:32:45
ttp://www.iunknown.com/2008/02/langnet-wrap-up.html

IronRubyの中の人による、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#の学習はいい先行投資かもしれないねぇ。まぁ楽しいからやってるんですし、皆さんそうなんでしょうけど。
234デフォルトの名無しさん:2008/02/03(日) 00:18:28
どうせ次のC#までまた2年ぐらいあるんだろうしなぁ・・・
F#製品に使うことにするノシ
235デフォルトの名無しさん:2008/02/03(日) 16:13:36
OCamlとか知らんでいきなり#lightでやるの危険だな
letに宣言と式があるなんて知らんかったし、do,doneとかもかなり混乱する
Web上だとそういう初歩の情報ないし。
OCaml入門は読むべしだ。互換性とか適当だけど。
Expert F#は割とわかりやすかった
236デフォルトの名無しさん:2008/02/08(金) 00:45:43
ひゃー
237デフォルトの名無しさん:2008/02/08(金) 00:49:55
F#の日本語本うp
238名無しさん♯:2008/02/24(日) 01:19:50
F#でMapReduceもどきを作ってみますた。(「もどき」なのは、sequentialにしか動かないから。w)
C# 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)
239名無しさん♯: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))
240名無しさん♯:2008/02/24(日) 12:44:20
C#版も置いておきまつ。クエリーの部分だけはきれいなんですが・・・。(´・ω・`)

using 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;
  }
241名無しさん♯:2008/02/24(日) 12:55:01
あれ?数分間書き込めなかった・・・。(´・ω・`)

  public 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());
  }
}
242名無しさん♯:2008/02/24(日) 12:55:35

static 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);
    }
  }
}
243名無しさん♯:2008/02/24(日) 13:37:52
Map/Reduce = Select/Aggregate だと今まで勘違いしてたけど、

 Map -> SelectじゃなくてSelectMany(generator的な操作)
 Reduce -> 確かにAggregateの操作だけど、厳密にはSelectの中で(selectorとして)実行されるAggregate

だったのね。実際に書いてみないとなかなか気づけんわ。(´・ω・`)
244名無しさん♯: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' の引数の順番の問題なのですが・・・。
245デフォルトの名無しさん:2008/02/24(日) 14:32:14
僕は末尾再帰用の追加の引数は最後に置くなぁ
もともと引数は「入力、出力」の順で書いてたので。
末尾再帰は局所定義にすることがほとんどで
部分適用をしないから、それでもいいかなと。
246名無しさん♯:2008/02/24(日) 16:11:10
おお、即日レスがつくとは・・・。(つД`)

>>245
> もともと引数は「入力、出力」の順で書いてたので。

確かにそうですね・・・。

sum2の方は一見ムダがないですけど、意味的にはちょっと無理やりなのかもしれませんね・・・。(´・ω・`)
247デフォルトの名無しさん:2008/02/24(日) 19:26:50
F#がNTPに対応すれば問題なし。
248名無しさん♯:2008/02/25(月) 14:49:13
Haskellにも移植してみますた。

import 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
249名無しさん♯: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
250名無しさん♯:2008/02/25(月) 14:52:45
こうやって見ると、F#は.NETの資産を使える分、すごく楽だなあ・・・。(´・ω・`)
251名無しさん♯:2008/02/25(月) 20:37:46
こだわる人はこだわる修正でつ。(´・ω・`)

mapper :: (Int, String) -> [(String, Int)]
mapper = map (\s -> (map toLower s, 1)) . filter (not . null) . split " ,.!?" . snd
252デフォルトの名無しさん:2008/02/26(火) 20:27:17
やはは
253デフォルトの名無しさん:2008/03/07(金) 07:36:31
>>247
NTP対応って何よ?
これか
>米国国家毒性プログラム(べいこくこっかどくせいプログラム、英: National Toxicology Program 、略称: NTP )
とはアメリカ保健社会福祉省が実施している化学物質の毒性研究をまとめ、発がん性物質の分類、試験を行う計画である。
254デフォルトの名無しさん:2008/03/07(金) 08:01:10
面白いと思って書き込んでるのがすごいよな
255デフォルトの名無しさん:2008/03/07(金) 12:12:17
named template(?) parameter
256デフォルトの名無しさん:2008/03/07(金) 14:34:54
むしろ名古屋トヨペット
257デフォルトの名無しさん:2008/03/09(日) 09:58:07
時間同期のプロトコルにきまっとるだろう
258デフォルトの名無しさん:2008/03/20(木) 09:33:17
自分のプログラムの中にF#のインタープリタを組み込みたいんですが可能ですか?
今のプログラムはC#で書いていて、その挙動の一部をカスタマイズできるように
したいのですが、せっかく覚え始めたF#で書ければいいなぁと思っています。
259デフォルトの名無しさん:2008/03/20(木) 18:53:39
キーワードはCodeDOM。
あとは自分で調べろ>>258
260デフォルトの名無しさん:2008/03/28(金) 15:38:29
Visual Studio持ってないとF#って使えないの?
一応インストールはできたんだけど、コマンド打ってくだけ。
261デフォルトの名無しさん:2008/03/28(金) 17:43:18
VSShellがあれば使える。
あと、SharpDevelop 3.0で使えるようになる予定。Beta1で載った。
262デフォルトの名無しさん:2008/03/28(金) 18:12:16
VSShellをDLしようと思って、Visual Studio 2008 SDK 1.0をDLしたんだけど
Visual Studioがインストールされてないとだめみたいだ。VSShell単体って
どこにあるの?てか、あるの?
263デフォルトの名無しさん:2008/03/28(金) 18:13:53
あったわ。
264デフォルトの名無しさん:2008/03/28(金) 19:12:55
ハローワールドできたわ。
で、いい本ないの?
265デフォルトの名無しさん:2008/03/28(金) 19:15:17
http://www.amazon.com/Foundations-F-Experts-Voice-Net/dp/1590597575/ref=pd_bbs_sr_2?ie=UTF8&s=books&qid=1206698720&sr=1-2

Foundations of F#

ネイティブが分かりにくいと酷評してるんだが、読んだ人どう?
266デフォルトの名無しさん:2008/03/28(金) 19:40:56
全部読んでないが、Expert F#のほうが分かりやすい。
内容も別にExpert向けというわけでもないし。高度な話題も載ってるが。
267デフォルトの名無しさん:2008/03/28(金) 19:56:18
>>266
そうなんだ。
星の数のとおりか。
でも高いな。。
268デフォルトの名無しさん:2008/04/19(土) 10:36:13
すみません、WinAPI呼び出しわかる方いますか?やりたいこと→PeekMessage呼び出し

[<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#プロジェクトでは「参照の追加」はできないのでしょうか?
269268:2008/04/21(月) 00:39:32
↓XPと.net framework3.0入れたらコンパイル通ったので、何かの参考までに。

open 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";;
270デフォルトの名無しさん:2008/04/21(月) 18:42:16
そりゃそうだ。
System.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
271デフォルトの名無しさん:2008/04/22(火) 01:51:43
MSGとかの構造体を自力で実装しなくていいってことか?
まじ.netとかそうなってるの?
そもそも実行できたのかあやしいんだが
272デフォルトの名無しさん:2008/04/24(木) 19:14:11
さらに追記
(lpMsg : (ref <System.Windows.Interop.MSG>)の箇所は
(lpMsg :System.Windows.Interop.MSG)にしないと実行時にマーシャリング系のエラーが出る。
しかしどちらにせよ、デバッグモードで動かすと構造体のサイズ違うっていわれるから
自分でMSG構造体定義した。


..けれど結局、やりたかったことは、Win32API使わなくてもできたよotz
273デフォルトの名無しさん:2008/05/02(金) 08:32:37
1.9.4.15 リリース
274デフォルトの名無しさん:2008/05/03(土) 23:26:43
>>171
OCaml, Haskell, Lispなどの関数型言語はラムダ計算という理論が骨組みにあって、
特別な構文を使わずに、柔軟なプログラミングをすることができる。
関数を抽象化するためのdelegateや、多相型を表現するためのgenericsなども、
特別な構文無しにプログラムできる。

しかも、キャストや、nullを使う言語よりも、実行時の安全性が高い。

関数型言語を知っている学生は、プログラミングの質に対する意識が非常に高いのが多い。
OCamlができる優秀な学生を雇って、F#のプロジェクトをやれば、いいんじゃね。
275デフォルトの名無しさん:2008/05/04(日) 17:14:41
FizzBuzz 2.0 ですね。わかります。
276デフォルトの名無しさん:2008/05/04(日) 17:35:07
>>274
学生 プッ
277デフォルトの名無しさん:2008/05/05(月) 01:32:22
こんにちは。
F#の開発環境って何があるんでしょうか?
・VS.NET拡張
・エディタとコンパイラ
以外にはありませんか?
278デフォルトの名無しさん:2008/05/05(月) 07:15:19
つ インタプリタ(fsi.exe)
279デフォルトの名無しさん:2008/05/05(月) 07:43:21
Expert F#のPDFを買ったお

Expertというわりにぜんぜん入門から対応しているから、いいね。
しかし、600ページ以上あって読み応えありすぎだw
280デフォルトの名無しさん:2008/05/05(月) 07:44:25
>>278
good! 補間や履歴も聞いていいですな。

しかしC-Aで行頭、C-Eで行末移動がほしかったな
281デフォルトの名無しさん:2008/05/05(月) 08:06:22
ebook版ってあったのか。英語はわかりやすくてよいよね
ただ、分厚いから俺は辞書的に使ってる

>>280
つ fsi用のEmacsモード作ろうぜってスレッド。俺は試したことないけども参考までに
ttp://cs.hubfs.net/forums/thread/4004.aspx
282デフォルトの名無しさん:2008/05/05(月) 14:23:56
283デフォルトの名無しさん:2008/05/11(日) 03:09:37
F#のライセンスについて、市販製品に使うときの注意事項を3行でplz
284デフォルトの名無しさん:2008/05/11(日) 09:07:12


285デフォルトの名無しさん:2008/05/11(日) 18:42:58
fslexってまだ日本語対応してないのな・・
ttp://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--
 あいうえお
286デフォルトの名無しさん:2008/05/17(土) 07:30:42
ふとおもったんだがLispの.NETなやつってある?
287デフォルトの名無しさん:2008/05/17(土) 09:49:01
>>286
List of CLI Languages - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/List_of_CLI_Languages

IronLisp, L#, DotLisp

NemerleもLispを参考にしてるらしいな
288デフォルトの名無しさん:2008/05/17(土) 10:33:20
英語のwikiは凄いな
P#とかA#とかあるw
289デフォルトの名無しさん:2008/05/17(土) 11:03:43
これみてP#やってみたくなったw
290デフォルトの名無しさん:2008/05/17(土) 11:54:21
ううむ,原理的には JVM でもいろいろできるんだろうけど,
MSIL (っていうのか?)上での方がバリエーションが多いなぁ.
これって一応MS的にはドッキリ大成功みたいな感じなのかね?
291デフォルトの名無しさん:2008/05/17(土) 13:37:21
>>290
MSは.NET 1.0のSDKにLISPのコンパイラを付けてたくらいだから
最初から狙って取りに行ってたんだと思うよ。
292デフォルトの名無しさん:2008/05/17(土) 20:56:32
MSはCOMでも多言語に凝っていたな。
293デフォルトの名無しさん:2008/05/17(土) 22:29:12
>>245
そもそもこの例ではfold_leftを使って、
let sum = fold_left (+) 0
のようにできるのでは。(やぼですかそうですか)

末尾再帰のスタイルとしてはsum2の方がよい気がします。
>もともと引数は「入力、出力」の順で書いてたので。
関数型言語では、部分適用などができるから、この考え方はやめた方が。
294デフォルトの名無しさん: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()はエラーになります
295デフォルトの名無しさん:2008/06/05(木) 08:25:16
OCamler な俺には 294 ってキモすぎてしょうがないんだが。
F# プログラムってこうなの?
296デフォルトの名無しさん:2008/06/05(木) 09:33:50
パターンマッチングつかえってことかい?
297デフォルトの名無しさん:2008/06/05(木) 10:31:35
いや、Obj.magic とか、キモい
298デフォルトの名無しさん:2008/06/07(土) 13:13:10
名前空間深すぎて読み辛すぎるな
299デフォルトの名無しさん:2008/06/08(日) 01:17:34
Ocamlerってなんて読むの?おかむらー?
300デフォルトの名無しさん:2008/06/08(日) 08:25:13
MinCamler?
SML#ist?
301デフォルトの名無しさん:2008/06/08(日) 10:44:49
>>299
オブジェクティブラクダ
302デフォルトの名無しさん:2008/06/08(日) 14:26:15
OCaml 使いは 岡村 なのか・・・
303デフォルトの名無しさん:2008/06/15(日) 17:59:55
だからOでオブジェクティブなんだよw

Camlはフランス語でラクダ(キャメル)の意。

オブジェクティブキャメラー。
304デフォルトの名無しさん:2008/06/15(日) 20:17:58
ラクダー
305デフォルトの名無しさん:2008/06/16(月) 05:50:15
>Camlはフランス語でラクダ(キャメル)の意。
大嘘こいてんじゃねーよ
306デフォルトの名無しさん:2008/06/16(月) 08:30:41
C: Categorical
A: Abstract
M: Machine
L: Language
307デフォルトの名無しさん:2008/06/16(月) 14:44:39
>>305
低脳w
308デフォルトの名無しさん:2008/06/16(月) 20:21:27
camlなんてフランス語ないよね
仮に camelのつもりだとしてもない
309デフォルトの名無しさん:2008/06/16(月) 21:41:05
>>308
camlはフランス語にあるよw
310デフォルトの名無しさん:2008/06/16(月) 22:35:11
つまらん
311デフォルトの名無しさん:2008/06/16(月) 23:53:02
>>309
ない
312デフォルトの名無しさん:2008/06/17(火) 01:28:22
>>311
学習用の辞書に載ってないからってw
313デフォルトの名無しさん:2008/06/17(火) 01:46:38
CAML = Cargo Aircraft Minelayer
314デフォルトの名無しさん:2008/06/17(火) 02:13:44
そいうや随分前にも全角wで書き込む阿呆がいたな
日本もそういう季節になったの?

315デフォルトの名無しさん:2008/06/17(火) 05:12:02
フォントをメイリオにしてから全角、半角の区別がつかない
316デフォルトの名無しさん:2008/06/17(火) 17:48:41
それだけMSゴシックが不メイリオだったってことか。
317デフォルトの名無しさん:2008/06/27(金) 09:50:45
これってバグかな?マニュアルでは見つからない場合Not_found例外とあるが
IndexOutOfBounds例外が出る
初心者なので判断がつかず・・

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());;
318デフォルトの名無しさん:2008/06/27(金) 23:13:30
F#のことは知らんOCamlの人だけど、printfでこけてんじゃないの?
319デフォルトの名無しさん:2008/06/28(土) 07:12:14
んー、以下のコードでも試してみたけど、やはりIndexOutOfBounds例外でます
ライブラリよりは俺のコードがバグってると思うんで
どっかしょぼい所でミスってるんじゃないかと思うが・・
let msg s = System.Windows.Forms.MessageBox.Show s |> ignore in
try
List.find ((<)100) [1..10] |> ignore
with e -> msg (e.ToString());;
320デフォルトの名無しさん:2008/06/28(土) 07:56:45
手元のF# Version 1.9.4.17だと、>>317
Not_found(System.Collections.Generic.KeyNotFoundException)例外が出るので
コードに問題はないはず

この例外は、.NET Framework version 2.0で追加されたものなので、
Microsoft .NET Framework Version 2.0 Redistributable Package
を入れれば直るんじゃない?
321デフォルトの名無しさん:2008/06/28(土) 11:18:47
検証ありがとうございます。
私の環境の問題のようですね

F#のバージョンも1.9.3.14と少し古いので
あわせてバージョンアップしてみますわ
322デフォルトの名無しさん:2008/06/29(日) 01:37:08
ちょwwまずはバージョン確認せいやw
323デフォルトの名無しさん:2008/07/01(火) 21:03:36
>>317
Detailed 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.
324デフォルトの名無しさん:2008/07/08(火) 20:09:07
F#はLinux上でも動きますか?
コンパイルだけでもしたいのですが。。。
325デフォルトの名無しさん:2008/07/08(火) 20:38:01
>>324
zipを展開すると install-mono.sh が入っているからこれで動くんじゃないのかね。
326デフォルトの名無しさん:2008/07/10(木) 01:28:11
InfoQ: F#の土台を越えて - 非同期ワークフロー
http://www.infoq.com/jp/articles/pickering-fsharp-async
327デフォルトの名無しさん:2008/07/15(火) 12:14:54
328デフォルトの名無しさん:2008/08/30(土) 07:27:00
Microsoft F#, September 2008 Community Technology Preview
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=61ad6924-93ad-48dc-8c67-60f7e7803d3c&DisplayLang=en

言語仕様からライブラリ構成まで、だいぶ変わったな
329デフォルトの名無しさん:2008/08/30(土) 11:05:27
非同期ワークフローとか、ParallelExtention,Scopeとかがどうかぶってどう統合されるのかがよくわからん(´・ω・`)
330デフォルトの名無しさん:2008/08/30(土) 12:49:52
知ってる言葉を並べてるだけだろ
331デフォルトの名無しさん:2008/08/30(土) 14:29:36
>>330
ぷっ
理解できないからって・・・w
332デフォルトの名無しさん:2008/08/30(土) 18:29:51
>>330
ぷっ
理解できないからって・・・w
333デフォルトの名無しさん:2008/08/30(土) 21:27:29
>>330
理解できないからぶってぶって・・・w
334デフォルトの名無しさん:2008/08/31(日) 18:01:34
>>333
は?
335デフォルトの名無しさん:2008/08/31(日) 18:06:01
>>333
は?
336デフォルトの名無しさん:2008/08/31(日) 18:14:01
>>333
は?
337デフォルトの名無しさん:2008/09/01(月) 00:19:39
俺もぶってほしい(*´∀`*)
338デフォルトの名無しさん:2008/09/07(日) 01:30:34
339デフォルトの名無しさん:2008/09/08(月) 13:19:45
ブログネタとかでもだんだん見るようになってきたけど、
OCaml派生として使ってるやつばっかりだな
OCaml知らない俺から見るとなんかぜんぜんF#っぽくないし、
そっち系は面白くならないと思うが。
.NETライブラリ使ってるやつとかあんまいないのかね
340デフォルトの名無しさん:2008/09/08(月) 20:26:38
>>339
windows上の設置が簡単なocamlって扱いだからでないか?
人に渡すにしてもランタイムいらんし。
341デフォルトの名無しさん:2008/09/11(木) 11:17:55
CTPになって2008しかインストール出来なくなったのはいいけど、
前からあったサンプルプログラムがコンパイルできないよ。

CTP用のサンプルはDirectX関係がコンパイル出来ないし、
スレッド周りとか勉強したいんだけどなぁ。
342デフォルトの名無しさん:2008/09/19(金) 15:40:17
.netライブラリなんて他と同じように使えばいいだろ
343デフォルトの名無しさん:2008/09/22(月) 23:34:56
こうですか?わかりません
をVB.NET風に書こうと思ったけどめんどくさかったのでやめた

344デフォルトの名無しさん:2008/09/24(水) 21:44:32
#useってデバッグ用途とかでかなり便利だったのにな。
#loadじゃ関数とかアクセスできないし、
再起動してfsi --useも起動の時間がかかりすぎて代わりにならない。
復活してくれんかな。
345デフォルトの名無しさん:2008/10/12(日) 13:14:30
.Net使ってるとWin32APIが使いたい場面が多々出てくるが
細かいところでわからんことが多い
C#⇔F#コード対応表みたいなのがほしいわ
フック書きてぇ
346デフォルトの名無しさん:2008/10/13(月) 09:33:20
F#で学ぶ関数型プログラミング入門
「関数型プログラミングの主な概念とF#での利用例」

http://codezine.jp/article/detail/3041
347デフォルトの名無しさん:2008/10/13(月) 15:13:21
>>345
P/Invoke宣言だけはC#で書いてしまえばいいんでない?
348デフォルトの名無しさん:2008/10/13(月) 16:01:48
↓こんなのがC#側で定義出来るってこと?
[<DllImport("user32.dll",EntryPoint="SetWindowsHookEx",SetLastError=true)>] let ...

(たぶんdelegateキーワード使う)HOOKPROCの型がわからないので
実際そこでも詰まってるんだが、それがわかったとしても
SetHookの返り値をIntPtr.Zeroとどうやって比較するのかとか
わからない箇所あって、若干諦めてる

ところでF#にはいわゆるbreakやcontinueはないんですかね
for文の中でreturnするケースは手続き型の既存資産には多いと思うが
F#に移植しようと思ったら再帰等でロジックを考え直す必要があるとすると
作業コストが高い
break,last,return,continueなんかで言語仕様検索しても
それらしいのは見つからんね
349デフォルトの名無しさん:2008/10/13(月) 16:12:45
自己レス。残念だけどなさそうだわ
ttp://cs.hubfs.net/forums/thread/7118.aspx
350デフォルトの名無しさん:2008/10/13(月) 19:17:02
>>348
移植コストを下げることに意味はない
カエレ
351デフォルトの名無しさん:2008/10/13(月) 19:27:22
アローつくれば、順次処理、条件分岐、繰り返しができるお
352デフォルトの名無しさん:2008/10/13(月) 19:43:07
>>350 なぜ
353デフォルトの名無しさん:2008/10/14(火) 09:33:33
逆に、何でソースコードレベルで移植しようとか思うんだ?
対象環境に言語処理系が無いとかなら分かるけど、.NETだぞ?
普通、DLL作ってFFI経由で呼び出しするだろ。

なんだか、同じ言語で書くことにこだわりすぎてる気がするけど。
354デフォルトの名無しさん:2008/10/14(火) 22:37:30
>>345 そんな単純な置き換えができるのはVB⇔C#とかだけだろ
F#は関数型言語で全然違うから、考えを変える必要があるかもしれない

むしろC#とF#のコードの一対一対応表がつくれるくらい似てる言語なら、F#いらねーだろ。
355デフォルトの名無しさん:2008/10/14(火) 22:44:09
そんなたいそうな理由があるわけじゃなくて、
単に楽したいと思ったんだが、気に障ったならすまない
356デフォルトの名無しさん:2008/10/15(水) 09:36:44
>>355
関数型言語によるプログラミングスタイルの一種に
breakやcontinueを使わずに制御構造をくっつけていくという一派がある。
それを調べてみると面白いと思うよ。

listモナドとかmaybeモナドとか>>351の言ってるarrowとか。
ttp://d.hatena.ne.jp/r-west/20070720/1184946510

慣れるとむしろbreakやcontinueイラネになる。
357デフォルトの名無しさん:2008/10/15(水) 14:47:07
もしかして、今の新しいバージョンのF#って2008製品版もってないと
入れられなくないですか・・・?('A`)

>>356
ほー、参考になる
358デフォルトの名無しさん:2008/10/15(水) 17:36:17
前のバージョンなら Express でも入れられたの?
プラグインとか機能追加系は製品版じゃなきゃ基本無理。
359デフォルトの名無しさん:2008/10/15(水) 22:56:25
よく調べもせず臆面なくそんなレスを…
360デフォルトの名無しさん:2008/10/16(木) 20:30:58
そのための2ch
361デフォルトの名無しさん:2008/10/16(木) 22:05:54
356見て、出来たらF#でarrowを表現してみたいと思ったがさっぱりだ
関数a->bを渡すとarr a bが出来て、
arr a bの型に対する操作が色々あるんだろうと思うんだが
arr a bの型に当たる物はf#ではどう表現すれば良いのか
'a 'b tみたいに複数のジェネリックな型を持つことになる?

もしかしてHaskellのほうが抽象度が高いことができる?
362デフォルトの名無しさん:2008/10/16(木) 22:07:12
>>358
2008はもってないんだよね・・・うpでとするいい機会だ
363デフォルトの名無しさん:2008/10/17(金) 07:35:28
>>361
higher kind genericsというやつで、F#の型システムでは再現は無理ぽ。(´・ω・`)
F#もどきで書くと、こんな感じのものが必要。

Arrow<'arr<'a, 'b>>
364デフォルトの名無しさん:2008/10/17(金) 19:13:35
なるほど、非常に参考になった。
Haskellは進んでるな
365デフォルトの名無しさん:2008/10/18(土) 10:44:02
366デフォルトの名無しさん:2008/10/18(土) 16:24:25
>>365
Thanx。shell runtime入れりゃよかったのね
367デフォルトの名無しさん:2008/11/01(土) 12:44:35
手続き型べったりの人間には (|>) を多用すると評価順序がわからなくなって混乱するんだぜ

>>123とか

let _ = List.iter ((|>) ()) (List.map ((delay >> flip) (printf "closure %d\n" )) [1..10])

とかけば (unit -> unit) unit が10回ってわかるんだが…
368デフォルトの名無しさん:2008/11/03(月) 11:54:03
これでいいんじゃね?
Seq.iter (fun n -> printf "closure %d\n" n) [1..10]
369デフォルトの名無しさん:2008/11/08(土) 22:41:18
素人です。Expert F#読んでてわからないことがあったので質問

type 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))))))))))

見づらくて申し訳ない…
370デフォルトの名無しさん:2008/11/10(月) 23:15:20
こうじゃない?
let 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
371369:2008/11/15(土) 21:52:50
あーunit -> 'a option のコンテナってことか
ようやく理解できたような
ありがとう
372デフォルトの名無しさん:2008/11/23(日) 10:37:08
C++のvectorみたいなコンテナってある?
Microsoft.FSharp.Collections.ResizeArrayがそうかと思ったら、
Note: an abbreviation for List<'a>て書いてあたよ
373デフォルトの名無しさん:2008/11/23(日) 12:58:16
ResizeArray でいいんじゃないのん?
Microsoft.FSharp.Collections.List<'a> と System.Collections.Generic.List<'a> は別物

ttp://research.microsoft.com/fsharp/manual/FSharp.Core/Microsoft.FSharp.Collections.html
374デフォルトの名無しさん:2008/11/27(木) 09:16:40
ああ、Listって名前だから勘違いしたけどインデックスアクセスはO(1)なんだな
375デフォルトの名無しさん:2008/11/29(土) 21:53:44
System.Windows.Forms.dllを参照したいんですが、.NETのVersion3.5には見つかりませんでした。
フォームを表示するアプリケーションを作る場合、現状では.NET Version2のSystem.Windows.Forms.dll
を参照するしかないんでしょうか?
376375: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

と書いてあったので、今の設定で良さそうです。
377デフォルトの名無しさん:2008/12/05(金) 18:55:21
今、日本がピンチです。
http://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
リンク先を見て危機を感じるなら、コピペを貼ってください。

378デフォルトの名無しさん:2008/12/11(木) 20:42:09
Foundation of F#の92ページのサンプルってビルド失敗しないか?
IEnumerable.iterで怒られる。iterなんてねーよって。
379デフォルトの名無しさん:2008/12/11(木) 20:46:53
Seqにしたら動いた。。
380デフォルトの名無しさん:2008/12/12(金) 19:54:50
F#の時代がクル━━━━━━(゚∀゚)━━━━━━ !!

正式発表:Visual Studio 2010がF#でシップ予定 - InfoQ
http://www.infoq.com/jp/news/2008/12/FSharp-Release
381デフォルトの名無しさん:2008/12/12(金) 20:01:17
WindowsではC++は消え行く運命か?
382デフォルトの名無しさん:2008/12/12(金) 20:23:12
何でそう思ったのか知らんけど、当面は残るから心配する必要は無い。
まぁでも、Windows向けに開発するなら.NETにも触れといた方がいいとは思う。
383デフォルトの名無しさん:2008/12/12(金) 21:48:11
>>380
機能プログラミングって・・・w
384デフォルトの名無しさん:2008/12/12(金) 22:14:33
F#はOCamlのコード書くために使うわ
385デフォルトの名無しさん:2008/12/13(土) 10:57:24
>J#と全く同様の方法で、
ざわ… ざわ…
386デフォルトの名無しさん:2008/12/27(土) 00:41:54
>>384
let 〜 andができないのこまらね?
387デフォルトの名無しさん:2008/12/27(土) 06:37:35
今後MFC使う場面ってあるの?
388デフォルトの名無しさん:2008/12/27(土) 12:34:30
質問です。
ExpertF#に以下のクラス定義があります。

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の方法には他に意味が
あるのでしょうか?
389デフォルトの名無しさん:2008/12/27(土) 13:28:37
名前指定してるから引数の順番入れ替えても許されるとかそういう利便性の話では
390デフォルトの名無しさん:2008/12/27(土) 14:29:25
>>389
レスどうもです。
やってみました。確かにそういう利便性がありました。
ありがとうございました。
391デフォルトの名無しさん:2008/12/27(土) 18:52:50
>>380
VSでは単独での使用が想定されてないとか
アプリケーションのコアを構築するためとか
どういう意味なのかね。想定場面がよくわからん
だいたいC#VBからF#の関数呼ぶのも一苦労なんだけど。
VSなしじゃ使い物にならなくなるってことかな
CLR上のLL的ポジションでいて欲しかったんだけどなあ
392デフォルトの名無しさん:2008/12/28(日) 22:58:56
>>391
F# にはデザイナ ツールが含まれない。
つまり、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)
393デフォルトの名無しさん:2008/12/29(月) 07:09:17
>>392
ペタペタできないのか
じゃあ覚える意味あんまりないか
394392:2008/12/29(月) 21:39:23
あー。
念のため言っとくと「F# にはデザイナ ツールが含まれない」てのは VS2010 での話ね。
その次の VS とか、あるいは SP とかで、いずれは提供されるようになるものと思われ。
まあ、だとしても何年後だよって話だが。
395デフォルトの名無しさん:2008/12/29(月) 21:48:45
その次の VS とか、あるいは SP とかで、F#がなくなる可能性・・・
396デフォルトの名無しさん:2008/12/30(火) 00:05:38
.net自体物凄い歴史浅いのに、普遍化しとるねぇ
397デフォルトの名無しさん:2008/12/30(火) 01:21:32
>>393
ごめんこれ釣りなのかどうかわからなくなってきたw
398デフォルトの名無しさん:2008/12/30(火) 01:39:42
F#って型推論のせいでVSのインテリセンスの恩恵とかほとんどなさそうだな
399デフォルトの名無しさん:2008/12/30(火) 01:40:25
>>392
ごめんこれ釣りなのかどうかわからなくなってきたw
400デフォルトの名無しさん:2008/12/30(火) 02:53:51
>>392
普通にかけないんだけどなにが普通なんだ?
let x = 2 and y = 1;;

どういう仕様なんだと思ったけどandの前に改行がいるんだな
401デフォルトの名無しさん:2009/01/04(日) 21:03:52
天才ども教えてくれ

let 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とは何なのか。
402デフォルトの名無しさん:2009/01/05(月) 22:53:07
>>401
天才じゃないが答えてみる

関数 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
だもんで型注釈に頼るような場面は少ないように思われる
403デフォルトの名無しさん:2009/01/06(火) 03:16:50
>>402
なるほど。理解できた。
(None : int)は(None : int option)の誤記だと
思うけど後者でうまくいった。全体に型注釈
をつけても良いんだね。thx。
404デフォルトの名無しさん:2009/01/17(土) 14:45:28
age
405デフォルトの名無しさん:2009/01/23(金) 17:21:26
もうだめぽ
406デフォルトの名無しさん:2009/01/31(土) 17:52:20
とりあえず、Ocamlの開発環境について教えてください。
ライブラリの管理などを含めてノウハウを教えてください。
エディタはこれを使えとか、コンパイルするときはこうしろとか、成果物を配布するときはこうしろとか、
そういう諸々のプログラミング周辺の雑務について知りたいです。
407デフォルトの名無しさん:2009/01/31(土) 22:54:46
関数型が難しいとかわからんとか言ってるヤツってなんなの?
けっこう他の言語はバリバリ使いこなしてるヤツに限ってそういうこと言う
なんかコードも書いてないのにわかんね言ってるように見えるんだけど

Web でかるーく拾いあさった断片的な知識並べてわかんない言われてもねえ

ほなたとえば OOP べんきょーするときもそんなやり方でやったんかと
『やさしい Java』読んだだけで Java できますゆー人間信用すんのかと
実践皆無の人間が OOP 知ってますゆーのを見てなんとも思わんのかと

もうね、自分の知らん新しいテクノロジ排除したいだけのオッサンちゃうんかと

プログラマ名乗るんならまずやってみろよと
知りたいのなら知る努力をしてみせろよと
その上でどこがどーゆー風にわからんのか言えと
408デフォルトの名無しさん:2009/01/31(土) 22:57:09
難易度はともかく関数型は実用性が低いから困るんだよ
409デフォルトの名無しさん:2009/01/31(土) 22:57:51
F# イラネ C# でイイじゃんゆうヤツには
精々逃げ切れるようにがんばれよと言っておきたい
410デフォルトの名無しさん:2009/01/31(土) 23:08:58
>>408
言いたいことはわからないでもない
でも F# に限っていうなら使い分ければいいんでないの?
関数型と命令型と OOP と
411デフォルトの名無しさん:2009/02/01(日) 13:50:33
アルゴリズムらしいアルゴリズムを自分で考えて(選択して)実装することなく、
APIを順に呼んでエラーチェックだけするようなプログラムばっか
書いている(書かされている)人には、勉強しようというモチベーションなど
湧かんだろうなー。
412デフォルトの名無しさん:2009/02/01(日) 22:26:24
やぁ、関数型言語っぽいノリになってきましたね
413デフォルトの名無しさん:2009/02/01(日) 23:08:23
>>411
職業プログラマの多くがそれに該当するのではないかと想像するが
それが仕事なんだから許してやってくれ
職業プログラマの世界では、そもそも「車輪の再生産」は悪とされている
自分でコードを書かなければ工数が減るしバグをつくりこむ機会もなくなるからな
414デフォルトの名無しさん:2009/02/01(日) 23:09:59
うちのところはよく使うものも全然共通化してくれないんだけど・・・
415デフォルトの名無しさん:2009/02/01(日) 23:28:05
世の中の「プログラマ」と名乗る人の結構な割合は関数型言語はおろか、
自力でtreeのトラバース程度もやる必要に迫られたことも無く、
2分探査のコードを書けと言われてバグ無く書けないこと位、みんな判ってるさ。
そして、F#を勉強する俺出世確実、とか思ってるやつもきっといない。
416デフォルトの名無しさん:2009/02/02(月) 00:08:16
自分でアルゴリズムを考えるのが楽しいんだよ。それはもちろん。
でも他人がもう作っちゃったプログラムを同じように作ったってしょうがないだろ。
その労力を新しいものを作る事に傾けたほうが効率的だし、
自分が作るということは作ったものに責任を取るということなんだから、
そんな余計な事まで首突っ込んで余計な責任を取ることも無いだろ。
417デフォルトの名無しさん:2009/02/02(月) 00:27:17
コレクションになんか突っ込んダリするだけですめばいいが、そこに永続化とか色んなフィーチャーを盛り込もうとすれば何処かの段階で全てを自分で作った方がきれいにまとまる段階が来ると思うがどうよ。

もちろん既存のオープンソースなどを使った方がいいのもわかるが、その仕様を自分の要望に合わせる時に無理があることも多いから。

自分で作るのも追っついてるうちはいいが本当に全てを作るわけにもいかずどこまで突き詰め、どこで妥協するのか考える毎日だが。
418デフォルトの名無しさん:2009/02/02(月) 22:11:53
そうなんだよなー
出来合いの API とかじゃ "想定された使い方" しかできん罠
なんかインジェクションしたいってなったらもう自分で組むっきゃないわけで

そんなときにクラスじゃ粒度がデカすぎるって場合も多いんだよね
はばからずに高階のノリでイケるってホント楽(柔軟)でいい
419デフォルトの名無しさん:2009/02/03(火) 00:09:39
>>413
> 職業プログラマの世界では、そもそも「車輪の再生産」は悪とされている
むしろどんどん再生産して儲けてくださいそれが職業プログラマの本分です
420デフォルトの名無しさん:2009/02/03(火) 01:16:29
再生産で儲けるのは三流
俺 一流だから そんなこと しない
421デフォルトの名無しさん:2009/02/03(火) 03:02:26
>>420
「再生産」で儲けることのなにが三流なのか、答えてもらおうじゃないかw
422デフォルトの名無しさん:2009/02/03(火) 12:02:30
儲けて旨い飯が食えりゃどっちでもいいじゃないか。
423デフォルトの名無しさん:2009/02/03(火) 12:13:33
一流は金に困ってなんかいないから、儲けることなんか二の次に考えて新しいことを追い続けられる。
424デフォルトの名無しさん:2009/02/03(火) 12:34:51
何で一流の奴がこんなとこで一流だの三流だのしょうもない議論やってんだよw
俺にできないような、新しい事を追い続けてくれよww

続きはマ板で
425デフォルトの名無しさん:2009/02/03(火) 21:09:42
>>419は皮肉

×車輪の再生産
○車輪の再発明
426デフォルトの名無しさん:2009/02/07(土) 11:05:47
糞スレ
427デフォルトの名無しさん: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の型を取り出すような
プログラムも書きたい・・
428デフォルトの名無しさん: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 を使わにゃならんような
理由があるんだったなら教えてほしい
429デフォルトの名無しさん: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
なのですが、なぜこうなるのかはさっぱりわかってません
430デフォルトの名無しさん:2009/02/08(日) 08:51:24
MLでYコンビネータを書く話なら、↓の最後にコードが載ってる
私には内容がさっぱり理解できないので、参考になるかどうかは分からんが

ttp://www.kurims.kyoto-u.ac.jp/~hassei/selfref2006.pdf
431デフォルトの名無しさん:2009/02/08(日) 09:55:54
>>427 は、↓にすればコンパイルが通るぞ

let apply1 = function (F f) -> f 1;;
432デフォルトの名無しさん:2009/02/08(日) 11:15:40
あっと、別にfunction使う必要はなかった

let apply1 (F f) = f 1;;
433デフォルトの名無しさん:2009/02/08(日) 13:03:49
>>430,431
ありがとう。とても参考になりました。
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#に翻訳しただけなので
理解したとは言い難い・・
434デフォルトの名無しさん:2009/02/08(日) 18:21:09
この流れなら書ける

type 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]
435デフォルトの名無しさん:2009/02/08(日) 20:43:02
同じ結論にたどり着いた
type 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)))
);;
436デフォルトの名無しさん:2009/02/10(火) 07:30:35
Programming F#: Rough Cuts Version

By Chris Smith
Rough Cuts Release: February 2009
Print Book Release: October 2009
Pages: 504

俺、この本が出たらF#はじめるんだ・・・
437デフォルトの名無しさん:2009/02/11(水) 02:31:18
のーみそが関数型に染まってくると
「左辺値」「右辺値」という言葉に
妙な違和感を覚えだす

そもそもそんな観念がないというか
あえて言うなら左辺に値などない

てなことを妄想してみたけどどうよ?
438デフォルトの名無しさん:2009/02/11(水) 04:31:13
>>437
概念じゃねーの?
439デフォルトの名無しさん:2009/02/11(水) 08:56:56
>>434-435
lazyに考えれば、もっとシンプルに書けるんじゃね(´・ω・`)?

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"
440デフォルトの名無しさん:2009/02/11(水) 09:01:08
>>437
「let x = 1」
これは等式とは思わない方が自然じゃないだろうか。
もともとは数学の論文とかでよく出てくる
「Let x := 1.(xを1と置く。)」とかいう表記を構文にしただけなんじゃないかと想像する。
等式じゃないなら、左辺、右辺とかいう観念はない。
441デフォルトの名無しさん:2009/02/11(水) 09:18:39
おまえら頭いい サイコーだ
442デフォルトの名無しさん:2009/02/11(水) 12:21:03
>>439
>>429 をよく見ろ
> 最終的にやりたいことは、let recを用いずにYコンビネータを書きたい
443デフォルトの名無しさん:2009/02/11(水) 12:55:37
ついでに、let rec 使用可なら lazy を使う必要すらない

let rec fix f x = f (fix f) x
let fact = fix <| fun f x -> if x = 0 then 1 else x * f (x - 1)
444デフォルトの名無しさん:2009/02/11(水) 13:39:14
>>443
> let rec fix f x = f (fix f) x

あー、そっか。x つければ落ちないんだ。(´・ω・`)

let rec fix f = f (fix f)

と書いて、StackOverflowになってたのでlazyにしてた。
445デフォルトの名無しさん:2009/02/11(水) 13:47:41
x はラムダ的に冗長に見えるけど、型推論の重要な手がかりになってるということか。

> 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
446デフォルトの名無しさん:2009/02/11(水) 14:01:31
そのあたりのことってProgramming in OCamlに書いてある
正格評価がどうのこうので。
試してないが、確かこれでもいけたはず
let rec y f = f (fun x -> y f x);;
fun arg -> (proc (R proc)) argの箇所を
(proc (R proc))としないのも同じ理由だと思う

とりあえずfunで包めばOK,みたいな
447デフォルトの名無しさん:2009/02/11(水) 14:31:19
結局、再帰型を使うようにしたら、結論はほとんど同じだった。(´・ω・`)

type 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)
448デフォルトの名無しさん:2009/02/11(水) 14:42:02
>>438
正直、「観念」と「概念」の違いがわからんで調べてきた
どちらも「モノコトに対する意識・考え」だが…

* 観念
英語でいう idea の意味に近い
オレオレ解釈的(主観的)
故に観念は多様である

* 概念
英語でいう concept の意味に近い
ふつうはみんなそう解釈するよねー的(客観的)
故に概念は一様である

という違いがあるようだ。

左辺値、右辺値という考え方は、一般に共通の理解を得ている
もの(通念)であり、それらは「概念」と呼ぶのが相応しい
ということかな?
449デフォルトの名無しさん:2009/02/11(水) 14:45:18
>>448
まあニュアンスが伝わればいいんじゃね?
450デフォルトの名無しさん:2009/02/12(木) 07:21:21
>>445
冗長なんじゃなくて、正格評価の世界では意味が全く別のものになる。

let rec fix = fun f -> f (fix f)

let rec fix = fun f -> fun x -> f (fix f) x

後者では x が遅延の役割をしてくれる。

Haskellのような遅延評価の世界では、確かに冗長なだけ。
451デフォルトの名無しさん:2009/02/12(木) 07:31:11
f そのものを遅延化してしまう(>>439)のと、
引数 x を追加して遅延の役割をしてもらう(>>443)のと、

どちらがコードの見た目的にやさしいかは明らか。w
452デフォルトの名無しさん:2009/02/13(金) 07:47:47
f (fix f) と fun x -> f (fix f) x って同義じゃないの?

んー、マジで分からん
453デフォルトの名無しさん:2009/02/13(金) 19:50:03
let rec fix f = f (fix f) だと、f が渡された途端、

f (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 は展開されない。
454デフォルトの名無しさん:2009/02/13(金) 19:54:11
ちょっと言葉足らずなので修正。

× 関数を返そうとはするが、fix を展開しようとして無限ループ。
○ 関数を返そうとはするが、先に fix を展開してしまい無限ループ。

× x が渡されるまで fix は展開されない。
○ 先に関数を返し、x が渡されるまで fix は展開されない。
455デフォルトの名無しさん:2009/02/14(土) 17:13:10
関数は first-class object ではあっても
関数 = 値 ではない、と

――ここで正格評価において

let rec fix f = f (fix f) なる定義で fix g を評価しようとしたら?
必死こいて値を算出しようとしてしまうんだな
で、その結果、>>453 が示すように無限ループに陥る

let rec fix f x = f (fix f) x なる定義で fix g  を評価しようとしたら?
これは部分適用だから関数オブジェクトの生成を行うのだな
で、後々、(fix g) y とされたときに値の算出が始まる
456デフォルトの名無しさん:2009/02/15(日) 23:01:31
高尚な議論の最中で流れぶった切ってゴメン

入れ子になった型宣言(ネストされた type)って無理?

type a () =
  type b = {x : int; y : int;}
  ...

とかすると、2つ目の type で
Unexpected keyword 'type' in type definition
と怒られる
457デフォルトの名無しさん:2009/02/17(火) 20:14:16
>>456
できなさげ

確かに C# ではインナー クラスできるけど
Java と違ってそんなに多用されるもんでもないような

てか例示のコードならタプルでいいんじゃ?
458デフォルトの名無しさん:2009/02/17(火) 22:01:21
ありがと、やっぱ出来なさそうですね。

まぁ、確かにタプルでも機能するんですが、
各要素へのアクセスが面倒なんで
レコードの方が扱いやすいなぁと。
459デフォルトの名無しさん:2009/02/18(水) 01:02:15
.NET 言語なんで C# 基準で考えてしまいがちだが
F# は OCaml ベースなんだぜ?
internal すらぬるい、どうしても外部から隠蔽したいというなら
シグネチャ(.fsi)ファイルを書けばいいじゃないか

と、眠たいので調べもせずにいってみるテスト
460デフォルトの名無しさん:2009/02/18(水) 12:53:16
>>259
公開するものだけをシグネチャ ファイルにしたら上手くいった。
なるほど、fsi はこうやって使うのか。
改めて読み直してみたら本には書かれていたけど、
いままで自分には無関係だと思って無視してた。
もうちょっと調べてみる。

じつは OCaml は見たことも触ったこともないんだけど、
やっぱ一通り触れてみた方がいいのかな・・・
461デフォルトの名無しさん:2009/02/18(水) 20:18:22
>>259
言い忘れてた
ありがと
462デフォルトの名無しさん:2009/03/04(水) 22:31:36
seq<int> 型に拡張メソッドを加えたいです。

パラメータを int 型に制約しなければ例えば次のように出来ました。
type System.Collections.Generic.IEnumerable with
  member this.H = Seq.hd this

これを seq<int> 型の時のみ拡張することは出来ないのでしょうか。
463デフォルトの名無しさん:2009/03/07(土) 03:49:18
これってVisual Studioから使えるの?
464デフォルトの名無しさん:2009/03/07(土) 04:09:35
つかえるよ。
男は度胸。ものは試し。
まずはインストールしてミソ。
465デフォルトの名無しさん:2009/03/07(土) 09:32:33
2008のProでしか駄目でした的な感じなのだが・・・orz
2008 Pro安く売ってないのかね
466デフォルトの名無しさん:2009/03/07(土) 13:05:24
エディション比較ちゃんと見れと
http://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 のあるなしで判断できるだろうと
467デフォルトの名無しさん:2009/03/07(土) 17:19:53
使ってる人もっとなんか書いてくれ
Scala がどうとか言ってる同僚を黙らせたい


…俺? 日本語の本が出てからやるわw
468デフォルトの名無しさん:2009/03/07(土) 23:49:03
F# のことを勉強しようかと思ったが、至るところ null があるって聞いた時点で、萎えた。
469デフォルトの名無しさん:2009/03/07(土) 23:56:45
何を言ってるんだ?おまえは?
470デフォルトの名無しさん:2009/03/08(日) 00:07:37
>>467
どうとか言ってる内容にもよるわけだが、黙らせる方法ってのは。
関数型サイコーとでも言っているのかい?その同僚は。
471デフォルトの名無しさん:2009/03/08(日) 02:04:51
nullがあるって変な表現だよね。
472デフォルトの名無しさん:2009/03/08(日) 15:24:28
>>466
kwsk

2008 StdあればF#の拡張機能は組み込めるってこと?
あと、VS2008 の Shell 版なら本体買う必要なすってことなのかな?
473472: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ダウンロードしてくるわ。
ありがとう。
474デフォルトの名無しさん:2009/03/09(月) 22:36:42
>>468 はこれか。
http://d.hatena.ne.jp/camlspotter/

いろいろ挑発的なことが書いてあるな
475デフォルトの名無しさん:2009/03/22(日) 17:40:50
下がりすぎだろ
476デフォルトの名無しさん:2009/03/24(火) 16:39:37
FParsecの話なんかやってくれないかなあ
477デフォルトの名無しさん:2009/03/24(火) 20:11:44
こやつめw
478デフォルトの名無しさん:2009/04/15(水) 07:26:41
Lang.NET開催中でつよ。(´・ω・`)

ttp://www.langnetsymposium.com/2009/speakers.aspx
479デフォルトの名無しさん:2009/04/15(水) 07:36:20
CCIがいつの間にかCodePlexに逝ってたんだ。知らんかった。(´・ω・`)

Common 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/
480デフォルトの名無しさん:2009/04/15(水) 19:35:17
Reactive Framework解禁でつね。(´・ω・`)

Democratizing The Cloud Using the LiveLabs Reactive Framework
ttp://en.oreilly.com/oscon2009/public/schedule/detail/9093
481デフォルトの名無しさん:2009/04/15(水) 20:48:26
>479
なにこれ?
やさしい人(かしこい人)おしえてくれろ。
482デフォルトの名無しさん:2009/04/16(木) 06:12:26
>>481
MS Researchで昔から使われてる、.NETでのコンパイラ実装のための共通基盤です。
少なくとも2002年には存在してます。
ttp://www.inf.ethz.ch/personal/zueff/Presentations/dotNET%20ONE%202002.pdf

今ごろソース公開をはじめたということは、「Compiler as a Service」に向けての一歩ということじゃろか(´・ω・`)?
483デフォルトの名無しさん:2009/04/16(木) 06:19:37
んで、ccisamplesを見てのとおり、Small BasicがCCI上で書かれてるみたいね。
484デフォルトの名無しさん:2009/04/16(木) 18:01:22
へー。面白いね。
jay for C#とかと違って共通的なライブラリにするってわけだよね?
485デフォルトの名無しさん:2009/04/16(木) 19:03:16
FxCopのカスタムルール書いてアセンブリを分析してた人には、部分的にお馴染みかも。
http://japan.internet.com/developer/20061025/26.html
486デフォルトの名無しさん:2009/04/16(木) 19:37:36
にわかに盛り上がってると思ったら、F#の話題じゃなく、ドトネト全般の話題だったか。
487sage:2009/04/18(土) 00:39:14
M言語の話題はどうよ? > Lang.NET 2009
488デフォルトの名無しさん:2009/04/18(土) 07:04:45
ビデオがもううpされてますがな。(´・ω・`)
ttp://www.langnetsymposium.com/2009/talks.aspx
489デフォルトの名無しさん:2009/04/18(土) 17:42:21
EnumerableとObservableが双対になるということは、Reactive LINQは
comonadicなアプローチになるということじゃろか(´・ω・`)?

comonadとFRPの関係に言及してる人なんて、世界で数えるほどしか見つかりませんが・・・。
490デフォルトの名無しさん:2009/04/19(日) 15:14:55
SelectとWhereまではなんとなく動いた。


interface 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);
    }
  }
}
491デフォルトの名無しさん:2009/04/19(日) 15:15:53

class 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);
  }
}
492デフォルトの名無しさん:2009/04/19(日) 15:16:55

static 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);
  }
}
493デフォルトの名無しさん:2009/04/19(日) 15:18:09

static 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 が追加されますた
494デフォルトの名無しさん:2009/04/19(日) 20:59:45
??
上のコードは何となくC#に見えるのですが・・・
まあ、F#まだ良く知らない私が言っても説得力無いですね^^;

ええと、質問です。
F#がVS2010に正式採用されるそうですが、そうなったらF#入門書がそれなりに出ると思いますでしょうか?
さらには関数型言語のシェア(?)が今よりもっと広がると思いますでしょうか?
(つまり、他の関数型言語の入門書も増えますか?w)←実はこっちが私の願望
495デフォルトの名無しさん:2009/04/19(日) 21:01:09
あ、他の関数型言語の開発も活発化するというのも私の願望にあったりします^^;
496デフォルトの名無しさん:2009/04/19(日) 21:22:13
おれにもF#には見えないな
497デフォルトの名無しさん:2009/04/19(日) 22:10:31
>> 490
別擦れたてろ。
498デフォルトの名無しさん:2009/04/19(日) 22:55:05
別スレ立てるまでもないだろ。
http://pc12.2ch.net/test/read.cgi/tech/1202568694/
499デフォルトの名無しさん:2009/04/19(日) 23:09:11
>>494
私も期待してます。
「F# for Scientists」の様な面白い本が
日本でも生まれるといいな。
500デフォルトの名無しさん:2009/04/19(日) 23:55:19
> 「F# for Scientists」の様な面白い本
どんな内容なの?
50110:2009/04/20(月) 12:54:44
>>500
「Expert F#」と重なる部分も一部あるけど、
ライブラリの使い方や .NET 系としての使い方というよりも
関数型言語としての使い方の解説が多い。
たとえば、memorize を関数型で実現するテクニックはなるほどと思った。

最適化についても、高位のアルゴリズム的なものや、
もっと低位の最適化も一章まるまる割いて解説されてる。
(といっても、わずか24ページだけど)

Managed DirectX (Direct3D) の扱い方も載ってた。
しかも、クラスを作ってメソッドを作ってという
C# などの一般的な作りじゃなくて、
高階関数を連ねていく関数型言語っぽい作り。
シーングラフはバリアント型によるツリー構造のいい実例になってる。

ただ、CTP がリリースされる前に執筆した本なので、
今は推奨されていない古い書き方が一部ちらほらある。
(コンパイラが指摘してくれるから、簡単に直せるが)
同じ理由で Units of Measure などの新機能も扱っていない。

また、CTP 以前の文法も全てを網羅しているわけではなく、
例えばアクティブ パターンなどは扱っていない。

それでも、「Foundations of F#」の後に読むには
なかなかいい本になってる。
502デフォルトの名無しさん:2009/04/20(月) 12:56:13
すいません、名前の 10 は無関係です。

前に同じ板の 「課題」 にレスしてたので・・・
503デフォルトの名無しさん:2009/04/20(月) 15:46:41
せっかく>>10を参照したついでに、おまいら的にL#とかってアリなの?
http://www.lsharp.org/
504デフォルトの名無しさん:2009/04/20(月) 19:54:41
またLispもどきかよ、くらいの印象しかない
505デフォルトの名無しさん:2009/04/20(月) 20:14:01
Lisp の構文で .NET ライブラリが扱える
という以上の何ができるのか、紹介されたページからは分からん。
506500:2009/04/20(月) 21:18:09
> 501
詳細どうもです。DirectX にまで触れてるんですね。
2 冊目以降に読む本、みたいなイメージでしょうか。

国内では入門本すらまだの段階ですし
コイツと同じような内容のものとなると
…さていつ出るやらですなあ。
507デフォルトの名無しさん:2009/04/20(月) 23:41:52
lsharpでマクロとか使えるなら考えてみてもいい
508デフォルトの名無しさん:2009/04/21(火) 21:22:06
F# の標準ライブラリにある printf 系の関数みたいに
可変長引数のまねごとをしてみたいんだけど、
どういう仕組みになってるのかよく分からないです。

単純に次のようにはできないですよね。
let f n =
  if n = 0 then (fun () -> ())
  else (fun a -> printfn "%d" a)

F# のソースから printf => fprintf => ... => gprintf
と追ってみたけどよく分からないです。

単純な1引数と2引数を選択出来るようなサンプルを
誰か作ってくれませんか。
509デフォルトの名無しさん:2009/04/21(火) 22:15:17
> formats.mli
>
> /// Parse "printf-style" format specifiers at compile time, producing
> /// a list of items that specify the types of the things that follow.

ParseFormatString で grep するとしあわせになれるかも。
510デフォルトの名無しさん:2009/04/21(火) 22:29:12
>>509
ありがと。

grep してみたが、まだ幸せにはなれない。
ちょっと解析してみます。
511デフォルトの名無しさん:2009/04/22(水) 20:14:28
海外では徐々に F# 関連の本が出始めてますね。
これなんか面白そうです。

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月発売なんで、まだまだ先だけど
512デフォルトの名無しさん:2009/04/23(木) 00:12:51
>>511
早読みバージョン読んでるけど、関数型初めての自分には色々関数型での開発の利点とかを細かく説明してくれてるのでよいわぁ
513デフォルトの名無しさん:2009/04/25(土) 13:23:19
こっちの本はリファレンス的に利用できそう

The Definitive Guide to F#
http://www.apress.com/book/view/9781430224310
514デフォルトの名無しさん:2009/04/26(日) 12:24:48
501 ですが、すいません、
アクティブパターンは扱ってました。

ただし、他のトピックほど詳しくはないです。
半ページほどの紹介と、XML の解析を例にした
1ページ強ほどの実例だけです。

私自身、未だに使い方がよく分かりません。

他に、こんな事に役立つよとかいう例はないですかね。
「いげ太のブログ」をみても、使い所が想像できなくて。
http://igeta.cocolog-nifty.com/blog/2008/04/actpattern2.html#more
515デフォルトの名無しさん:2009/04/27(月) 01:40:24
あれ?
let multiply n1 n2=n1*n2
printf ("%f")( multiply 1.0 2.0)
printf ("%d")( multiply 3 4)
でなんで3行目にfloat is not compatible...とかいわれるの?
516デフォルトの名無しさん:2009/04/27(月) 07:40:31
>>515
ヒント:

2、3行目をコメントアウトして1行目の multiply 関数の型をみてみる
次に3行目だけをコメントアウトして multiply 関数の型をみてみる
最後に全てのコメントを外し、2行目と3行目を入れ替えて multiply 関数の型をみてみる
517デフォルトの名無しさん:2009/04/27(月) 11:13:43
>>516
2,3行目を逆にすると後の行がエラーになるのはわかります。
F#の型推論の場合、2行目で型が決定されてしまった時点でほかのものはそれに従わないといけないと言うこと?
これがC#のgenericsだったら(まぁそもそも*とかで書けませんが)2行目も3行目も各々の型に展開されてコンパイルされると思うんですが。
あぁかいてておもったがa'とかつかえばよいということ?
518デフォルトの名無しさん:2009/04/27(月) 12:05:27
ジェネリックと同じ問題があって演算子があると ’a のままで使えない。
もともとのOCamlでは演算子も別だしね。 *. とか。
519デフォルトの名無しさん:2009/04/27(月) 12:13:22
いっそ演算子を外出しにするとか
let compute f n1 n2 = f n1 n2
printfn "%f" (compute ( * ) 1.0 2.0)
printfn "%d" (compute ( * ) 3 4)
;;
520デフォルトの名無しさん:2009/04/28(火) 05:36:55
inlineをつけるとエラーにならない。

let 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
521516:2009/04/28(火) 08:42:13
なる。
演算子の問題あるから、例に書いたのはそのまま通らないとして、
inlineをつけないと最初の奴を書いた時点でそのコンパイルスコープ?でコンパイルされる時の型が一意に決まってしまうため後の行のものはエラーになる。
inline付ければ各々に対して展開されるため大丈夫。
a'とかつかえば、どの型でも通るようになる。
ということでおけー?
522デフォルトの名無しさん:2009/04/28(火) 09:37:15
これはキモい。
523デフォルトの名無しさん:2009/04/29(水) 00:39:53
わからんならかかんでヨロし
524デフォルトの名無しさん:2009/04/29(水) 00:52:59
>>520面白いな
static head-type type variableっていうのか ^ω^
525デフォルトの名無しさん:2009/04/29(水) 15:05:28
おもしれー、これってF#固有?OCamlにもあるの?
526デフォルトの名無しさん:2009/04/29(水) 16:06:49
ocamkでの通ったな
527デフォルトの名無しさん:2009/04/30(木) 09:08:06
F#のリソース管理ってどうしてますか?
528デフォルトの名無しさん:2009/04/30(木) 18:57:08
>>525 G'Camlだったらこんなことが出来るっぽいね
let plus = generic (+) | (+.)
F#版もstaticなメンバ関数が定義されていなければならないのは同じだから
これと同じ機能っぽい気がする
529527:2009/04/30(木) 20:30:00
自己解決しました
useがusingと似たような機能を持っているようです
530デフォルトの名無しさん:2009/05/09(土) 20:29:06
今月ベータ1が公開される予定だってさ。

http://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.
531デフォルトの名無しさん:2009/05/09(土) 20:43:31
むーん。今作ってるシステムの一部F#で実装しようと思ってたんだがどうすべかな・・・
532デフォルトの名無しさん:2009/05/12(火) 00:32:43
>>531
OOPを駆使しなければなんとかなるんじゃね
クラスまわりは構文かわりそう…
533デフォルトの名無しさん:2009/05/12(火) 00:40:39
>>531
まあ、一部ならいいんじゃね?
言語混在できるのが.NET Frameworkの強みだし。
534531:2009/05/12(火) 00:46:09
>532
構文の変更とかはいいんだけど、作り込んでったあとにあるときだけ挙動がおかしいとかわけわからんバグが出るのが怖いです・・・
>533
ごもっともだす。どうせC#と混在になるのは目に見えてるからなぁ
535デフォルトの名無しさん:2009/05/12(火) 07:39:39
ベータ1が今月内に出るんなら、
何が修正されたのか、機能はどうか、
情報が出てきても良い頃なんだが・・・
まだどこにも無いな
536デフォルトの名無しさん:2009/05/26(火) 22:36:44
VS2010ベータのF#は.NET4.0しか対応してないみたいだ
537デフォルトの名無しさん:2009/05/27(水) 00:47:37
PowerPack もなしですなー
538デフォルトの名無しさん:2009/05/27(水) 21:41:42
May 2009 CTPだと.NET2.0やMonoもOKみたい
539デフォルトの名無しさん:2009/05/28(木) 20:04:43
むぅ
fold_left -> fold
fold_right -> foldBack
ここに来てスタイル変えるか…

OCamlの小文字アンダースコア区切りはすっきりして好きだったんだがなぁ
540デフォルトの名無しさん:2009/05/28(木) 21:40:53
だよなあ
まあ アンダースコア区切り→キャメル はわからんでもない
しかし right を back はないわー

fold_right を foldBack と呼ぶような言語は聞いたことないんだが
どこ由来なのかねえ?
541デフォルトの名無しさん:2009/05/29(金) 01:40:44
変えるなら.NETと同じパスカルケースがよかったな…
542デフォルトの名無しさん:2009/05/29(金) 06:41:50
>>539
マジ?そりゃないわ。
畳み込みって、右からとか左からっていうのが一般的な用語
だと思う。
543デフォルトの名無しさん:2009/05/29(金) 09:13:33
+のオーバーロードとパイプ演算子|>のさわやかな風を残しつつF#終了
あれ多相ヴァリアントは?

さてOCamlに戻るか
544デフォルトの名無しさん:2009/05/29(金) 12:15:24
fold イイ! foldBack ダメ! みたいに覚えてもらいたいんだろうけど、、、
545デフォルトの名無しさん:2009/05/29(金) 16:01:45
できれば「.NET Frameworkが使えるOCaml」として作ってほしいなぁ
そういうリクエストしてみるかな
どうせβ2まであと1年あるし
546デフォルトの名無しさん:2009/05/29(金) 20:20:20
VisualOcaml作ってくれればいいよ
547デフォルトの名無しさん:2009/05/29(金) 23:51:41
>>545
実はあるんだが.NET1.1向け
Haskellもそうだな

.NET1.1の時に.NET向け関数型言語コンパイラが多数存在したのは
C#やF#に取り込むために関数型言語の実装を研究した残骸なのかもな


OCamlはライブラリ不足な上にLinux以外のOSで動かないライブラリもいくつかあるし(win以外も含め)
不満は色々あるが今更OCamlには戻れん…
548デフォルトの名無しさん:2009/05/30(土) 01:03:20
>>541
キャメル→関数
パスカル→メソッド
てことではないかと
549デフォルトの名無しさん:2009/05/31(日) 11:04:57
>>540
いいじゃん。
そもそも左から右が正で右から左が逆っていう考え方はヨーロッパ的で日本とは逆なんだから、
右とか左とかいうのが消えたのは喜ばしい。データには右左関係ないからな。
550デフォルトの名無しさん:2009/06/01(月) 13:42:23
データには正逆関係もないと思う。
古くからある抽象概念の名前を、突然、別の抽象的な言葉に置き換えるのなら、
もっと強い根拠がほしいと思う。もしあったら教えてください。
551デフォルトの名無しさん:2009/06/01(月) 21:58:52
F#初心者だが、配列だろうがリストだろうがとりあえずデータの前後はあるんでは?
初心者からするとそれほど違和感ない。
552デフォルトの名無しさん:2009/06/01(月) 22:00:46
OCamlとF#ってどのぐらい違うのよ。
.NET対応になってるのは別としてOCamlにあったナイスな機能がF#ではなくなってるとかあったら教えてたもれ
553デフォルトの名無しさん:2009/06/01(月) 22:32:37
>>552
OCamlのみ
 多相ヴァリアント、ファンクタ、注釈ありで型がつく箇所では省略しても必ず型推論できる性質
 Camlp4/5、ビルド関係のツール(F#はしょぼい)

オブジェクト指向部分は根本的に違う(nominal/structural)
554デフォルトの名無しさん:2009/06/02(火) 00:00:58
・・・
そのへんがあるとどんなにナイスか3行で頼む・・・
555540:2009/06/02(火) 00:13:32
>>549
「fold_left or fold_right」より「fold or foldBack」の方が、
なんとなーく、ふつうは fold 使えよ的雰囲気をかもせるような
気はするんだよね

array はいざしらず、seq や list では処理効率が違ってくるから、
それをやんわりと臭わせるのは好ましいことなんだとは思う

まあやっぱりただ、他言語では left か right かで統一されているものを
わざわざ無視してまで改良すべきものなのかなー?という感は拭えない
>>550 も言うように、伝統を変えるにはもっと強い根拠がほしいなあ

「これだから MS は!」なんて、関数型畑の人たちになじられやしないかという
556デフォルトの名無しさん:2009/06/02(火) 09:20:52
いっそのことaggregateとaggregateBackにすればまだよかったのに
長ったらしいが
557デフォルトの名無しさん:2009/06/06(土) 21:48:20
>>380

どうせ次にはJ#のポジションになってるんでしょw
558デフォルトの名無しさん:2009/06/06(土) 22:33:26
J# は言語やIDEの良し悪しの問題じゃなくて、
SUNともめたせいだからなぁ。

その点、F# はMSリサーチ製なんで大丈夫。
559デフォルトの名無しさん:2009/06/06(土) 22:40:45
Cωとかあったねー
560デフォルトの名無しさん:2009/06/06(土) 23:00:59
Cωの機能は C# に引き継がれてるから問題ない
561557:2009/06/07(日) 00:03:29
F# と J# を比較するのってアホ丸出しだぜ?
562デフォルトの名無しさん:2009/06/07(日) 00:06:54
>>561
自分で自分の事をアホ呼ばわりしてるようにしか見えんのだが
563デフォルトの名無しさん: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にアクセスしている輩は何者か?
564デフォルトの名無しさん:2009/06/08(月) 12:03:51
なんでJ#の話題になってんの?全然違うだろ。
565デフォルトの名無しさん:2009/06/08(月) 12:19:30
理由を書かず他人を罵倒する奴は大抵自分も判ってない。
566デフォルトの名無しさん:2009/06/08(月) 14:39:22
そりゃ疑問文だしなw
567デフォルトの名無しさん:2009/06/08(月) 21:51:58
まあなんだ、F#について語ろうよ

Custom Numeric Literalがどうしてもできんのだが
アレどうやったら定義できるの?わかる人いる?
568デフォルトの名無しさん:2009/06/09(火) 00:04:11
Custom Numeric Types ですね(Custom Numeric Literal とも言うのかな)。

私も 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." と怒られますね。
569デフォルトの名無しさん:2009/06/12(金) 19:38:42
1.9.6.16だと
#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'.
570デフォルトの名無しさん:2009/06/12(金) 19:59:51
追記
hoge.fsがhoge.fsx
ロード先ファイルが.fsx/.fs

等の組み合わせもいろいろためしたけど同じエラーが出る
571デフォルトの名無しさん:2009/06/14(日) 15:54:58
>>567 >>568

> only the suffixes in the set "INZQRG" are supported
http://cs.hubfs.net/forums/thread/10939.aspx

もうね、そうならそうと Release Note に書いといてくれと
572デフォルトの名無しさん:2009/06/14(日) 16:53:38
>>571
おぉ、できた。

苦労してできた後で思ったんだが、
これって何に使うんだろ・・・
いまいち分からん
573デフォルトの名無しさん:2009/06/14(日) 17:16:00
正式リリース後の入門書にはたいてい紹介されるであろう
Custom Numeric Types による有理数表現を一部実装してみたが、
面倒な割には余り恩恵が得られなさそうだ。
574デフォルトの名無しさん:2009/06/14(日) 17:44:29
>> 573
まあ関数なりで代用は利くけどね
無駄なカッコが省けるし、コード読みやすくなって割とイイと思う
面倒っちゃ面倒だけど取り立てて言うほどのものでもなくないかい?
575デフォルトの名無しさん:2009/06/14(日) 18:38:39
面倒というのを取り立てて言うほどのものでもないけど、
そもそも Custom Numeric Types 自体が取り立てて言うほどのものでもないような
576574:2009/06/14(日) 20:22:38
そういう細やかな機能のアレコレの積み重ねこそ
F# を F# たらしめている、と思うんだけれども

言語機能としてあるのにユーザ定義はできない
みたいなことがないように言語が設計されている
てのはよろこぶべきことなんじゃないかと
577デフォルトの名無しさん:2009/06/14(日) 20:37:34
>>576
そうですよね、すいません、別に悪く言うつもりは無かったんです。
他にどういうシチュエーションで使うと便利なんだろなぁという程度の気持ちでした。
(printfn なんかで使われてる可変数引数も
簡単にユーザー定義できるようになるといいなぁ・・・)

それはそうと、VS でのプロジェクト作成時に
オプション設定を無視して勝手に保存されるのは、
正式リリースではちゃんと直してくれるんだろうか。
578sage:2009/07/24(金) 10:00:32
保守
579デフォルトの名無しさん:2009/08/22(土) 18:32:01
以下のコードでF#からWPF呼んでみてるんだけど、
裏でコマンドプロンプトが立ち上がるのがうっとうしくてしょうがないんだ
どうしたら消せるのん?

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
580デフォルトの名無しさん:2009/08/23(日) 05:43:22
プロジェクトのプロパティで、
Application -> Output type を
Windows Application に変えれば消えるんじゃない?
581デフォルトの名無しさん:2009/08/24(月) 22:40:39
サクッと消えました。ありがとう!
582デフォルトの名無しさん:2009/08/29(土) 17:29:32
F#の使いどころって並列処理なのは理解できるんだが、
効果的に使える分野がわからない。
大量データで大量に処理する用途って動画とかそっち方面?

583デフォルトの名無しさん:2009/08/29(土) 18:29:47
普通のプログラムもF#で書けばよくね?
一度慣れるとC#とか万度くさくて。
584名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:22:35
ピンポイントで使おうみたいな意見をよくみるが
それはアプリの当該機能部分のみにF#使おうとしてるのか
そういう機能を持ったアプリ全体をF#で書こうとしてるのか。

どっちなんだろか。
585名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:57:22
>>582
別に高速計算のためだけに並列処理があるわけじゃないぞ。
GUIのインターフェース部分とメイン処理部分のスレッドを分けて、GUIの反応が悪くならないようにしたり、
ネットワークプログラムならそれぞれのセッション毎にスレッドを分けたり、
オブジェクトみたいな乗りで複数のプロセス同士をメッセージ通信でやりとりしたり(アクターモデル?プロセス代数?パイカルキュラス?)、
並列/並行プログラミングはプログラミングパラダイムだと考えた方がいい。
586名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:59:31
オブジェクト指向に取って代わって関数型言語による並行プログラミングが台頭してくる可能性がある
587名無しさん@そうだ選挙に行こう:2009/08/30(日) 16:40:45
つうか関数型言語はなんでいちいち対話型インターフェースがついてくるんだ
あんなんいらないと思うんだけど
588名無しさん@そうだ選挙に行こう:2009/08/30(日) 16:58:34
>>587
便利じゃん。
いちいちコンパイルしてテストなんてやらずに、対話的にいろいろ式を変化させて試せる。
軽量プログラミング言語とはそういうもんだ。
589名無しさん@そうだ選挙に行こう:2009/08/30(日) 17:22:18
インタープリタでも動作し、コンパイルも可能というのは良い路線だと思う。
MSは次期オフィスにVBAの代わりにF#でも載せればいのに。。
VBAはあまりにも古臭い。
590デフォルトの名無しさん:2009/09/04(金) 00:51:14
実はExcelとは親和性が高いかもね。
逆に手続き型のほうが相補的で良いのかも知れないが。
591デフォルトの名無しさん:2009/09/05(土) 00:43:35
http://codezine.jp/article/detail/4254
金融か。やっぱブラック=ショールズ公式適用できない問題に使われるのか。
金融に使われるためには、幾何ブラウン運動のシミュレーションできる
ライブラリがないと難しいかも。
592デフォルトの名無しさん:2009/09/05(土) 01:17:54
現在、F#を使う理由が見当たらないのだが、
C#を使わずにF#を使う利点ってどんなものがある?
関数型言語は慣れると工数を削れると言われているけど、
現状のF#ではC#よりも手軽に・・・とはいかないよね?
VS2010でGUIにて開発ができるようになると変わるのかな・・・
593デフォルトの名無しさん:2009/09/05(土) 01:23:02
>>592
一般的なプログラミング言語よりも数式の方を見慣れてる人向けだろうなぁ。

関数型(変数はimmutableで、関数のチェインでプログラム作る)ってのは
確かに並列処理には向いてるんだけども・・・

今、「関数型」って言われてるような言語はちょっと既存の流行りのプログラミング言語と
パラダイムが違いすぎて、そのままだと流行りようがないと思う。
なんか、C#っぽい文法、C#に近い文法で書いてるつもりが、
いつの間にかimmutableな変数使わされてて、
いつの間にか関数型なコード書いてるっていうような、
開発者に関数型を意識させない関数型言語みたいなのができないことにはなぁ。
594592:2009/09/05(土) 01:37:30
>>593
確かに関数型言語は理数系向きといわれてるね。

変数がimmutableということは、一つの関数は小さく作らざるを得ないだろうし、
となると、再利用の効率も上がるだろうし、
少しでも文法に慣れると可読性も高くなるだろうから、
将来的にはそれが利点になるのかな…。

しかし、これもVB6→VB.NET or C#のときも、
オブジェクト指向ということばと共に、同じことを言ってたような気がするな…。

まあ、とりあえず暫くはぬるーく付き合いを続けてみます。
595デフォルトの名無しさん:2009/09/05(土) 09:22:41
>>594
C#だって、C++系統の文法(見た目だけでも)かなり借用して、
そっちからの移行をかなり強く意識したわけで。
今となっては失敗だったと思う文法もあるけど、当時としてはやむなかったと思うし。
0, 1 で変わるようなパラダイム変化は大衆向けにはできない。

どっかのタイミングで、C#の成果とF#の成果が自然と融合して次の世代が生まれるかもしれないし、
F#に触れること自体は損にはならないと思うけど。
596デフォルトの名無しさん:2009/09/05(土) 14:30:45
俺的にはF#(・∀・)イイ!!とおもってたんだが
本場のオカムラ-によると型推論がなってないとか多態バリアントねーじゃんとかだめ出しされてる・・・(´;ω;`)ウッ…
597デフォルトの名無しさん:2009/09/05(土) 22:48:31
そういや、VF#ってOCamlの構文もサポートされるのはなんでだろう。
VF#インスコすると.mlファイルもなんかアイコンが変えられるし
OCamlの開発環境として使えるんだろうか。
OCamlの遺産を使いまわすつって需要があると思えんし。
598デフォルトの名無しさん:2009/09/06(日) 09:16:21
Standard ML昔いじってから10年以上ブランクあるが、
ひさしぶりに関数型言語触ってみるかな。
599デフォルトの名無しさん:2009/09/09(水) 03:50:28
金融関係の人に興味持ってもらえるもの作りたい。
http://derivative.fixstars.com/hpc.html
これ読む限りだと、確率過程(いわゆる確率微分方程式の領域)を
めちゃくちゃいっぱい高速で作り出せれば興味もってもらえそう。
F#って乱数計算速い?もしくは、並列計算で速くできるもの?
乱数関係さっぱりわからんのよ。
600デフォルトの名無しさん:2009/09/09(水) 03:51:57
訂正:乱数関係”も”
601デフォルトの名無しさん:2009/10/20(火) 01:06:40
関数型は特定用途を除き流行らない感じがする。
602デフォルトの名無しさん:2009/10/20(火) 01:49:00
んーずっとC#ばっかやってたけどF#は.NETつかえつつオブジェクト指向と関数型織り交ぜられて簡潔に書けるのでかなり使えそうな予感。
603デフォルトの名無しさん:2009/10/20(火) 11:14:12
>>601
「特定用途」が何か一言も書けないような人は触ったことないだろうし
今後も使わないだろうから、無理して来なくていいよ。
604デフォルトの名無しさん:2009/11/08(日) 19:18:31
でほるとが定数って頭おかしいだろ
605デフォルトの名無しさん:2009/11/08(日) 21:54:59
定数?
606デフォルトの名無しさん:2009/11/08(日) 23:09:11
定数じゃないよ、制約された値なんだよ
607デフォルトの名無しさん:2009/11/09(月) 01:15:21
実際、C# とかで書いててもそんなに変数を mutable に使ってなかったりはするんだけど。
mutable に使うのはメンバー変数かループで反復に使うものくらい。
それ以外のローカル変数は immutable でもまず困らない。

まあでも、デフォルトが immutable なのはやっぱちょっと使いづらい。
608デフォルトの名無しさん:2009/11/09(月) 07:39:13
デフォルトimmutableなほうが気にすることが減って楽だと思うけどねー
609デフォルトの名無しさん:2009/11/10(火) 00:31:24
>>608
役に立たないとは言わないけど、そんなにメリット大きい?
その代償として OOP 的なメンバー変数使えなかったり、
ループ全部再帰で書かなきゃ行けなくなるってデメリット以上に。

並列化しやすいとかいうのは、
要はスレッド間で状態を共有できなくすればいいだけの話なんで、
immutable はやり過ぎ。

変数は全部スレッドローカル、スレッド間で参照渡すの禁止、
スレッド間通信は Actor (MS 的に言うと Agent)ベースのメッセージ交換でやる
ってのだけで行けるはず。
610デフォルトの名無しさん:2009/11/10(火) 00:50:52
>609
多分、関数型チックに書くのになれてくと自然とそういう風に書かなくなると思われ。
611デフォルトの名無しさん:2009/11/10(火) 01:04:36
>>610
そっちに慣れた結果得られるものは何?
612デフォルトの名無しさん:2009/11/10(火) 02:18:30
immutable強制だとさすがにやりすぎだと思うけど、
両方使い分けができてデフォルトがimmutableな分には別に問題ないと思う。
613デフォルトの名無しさん:2009/11/10(火) 02:29:12
>>611
関数型でやりたくないならなぜF#を使うのか知りたい
614デフォルトの名無しさん:2009/11/10(火) 06:33:06
>611
(簡潔に書けること+状態無し)による高生産性が主なメリットじゃね。
615デフォルトの名無しさん:2009/11/10(火) 08:40:31
ところで

hoge.Connect()なんてるそっどがあって
例外が返ってこなくなるまでリトライし続けるのはどう書けばいいの?
616デフォルトの名無しさん:2009/11/10(火) 10:00:35
>>614
それ、ほんと簡潔で生産性高い?
617デフォルトの名無しさん:2009/11/10(火) 16:22:53
関数型プログラミングだからと言って、むやみやたらとループを再帰で書くことはないと思うけど
一般的にはそういうイメージなのかなあ。
自分はforeachとかfold/Aggregateのようなものをよく使う印象。
618デフォルトの名無しさん:2009/11/10(火) 16:40:04
関数型言語の入門としては、手続き脳を関数脳にするためにという意図か、
必ずやるプロセスなんだよね。ループ的な処理を再帰で書かせるのは。

一旦慣れてしまうと、mapとかの高階関数を使うようになって、自分で
高階関数を書いたり直接再帰を書いたりはしなくなるわけだけど。
619デフォルトの名無しさん:2009/11/10(火) 23:05:36
関数型な考え方は手続き型に応用できる場面が多い
まあ完全に関数型に移行するのは難しいけど、C#だって最近は関数型的になってるし
620デフォルトの名無しさん:2009/11/15(日) 09:44:33
VS2010のF#とOct2009CTPのF#ってバージョン違いますか?
2010はドットネット4.0上でCTPは2.0上?
621デフォルトの名無しさん:2009/11/15(日) 23:05:29
>> 620
You'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
622デフォルトの名無しさん:2009/11/28(土) 23:29:24
F#の数値単位変換みたいな機能いいね。
あれ、通貨レートとかうまい具合利用できたりするの?
623デフォルトの名無しさん:2009/11/28(土) 23:34:47
ああああああああいいいいいいい
624デフォルトの名無しさん:2009/11/28(土) 23:36:19
市場価格と連動するないのw?(冗談)
625デフォルトの名無しさん:2009/11/28(土) 23:43:06
さすがに今の市場価格とリアルに連動はネットワークとか
いろいろ絡んでくるからFX専門会社とかに任せないと無理として、
計算で便利ったら通貨だよね。
626デフォルトの名無しさん:2009/12/01(火) 15:45:02
VSとは独立してコマンドラインで使いたかったのは俺だけ?
627デフォルトの名無しさん:2009/12/01(火) 16:47:16
うん
628デフォルトの名無しさん:2009/12/01(火) 18:39:58
path通せばコマンドラインでも使えるよ
629デフォルトの名無しさん:2009/12/02(水) 11:11:35
Ocamlからそのまんまなんだろうけど、
コメントが (* *) なのは何とかして欲しい。
630デフォルトの名無しさん:2009/12/02(水) 11:55:56
いつからかは知らないが(*) は演算子で解釈してくれてるよ
631デフォルトの名無しさん:2009/12/02(水) 19:58:43
コメントなんかすぐ慣れるだろ
632デフォルトの名無しさん:2009/12/02(水) 20:55:50
普段は困らないが、インタープリタのfsiで使ってるときだね。

> List.fold_left (* ) 1 [1..10]
- ;;
- ;;
- ;;
-
-

何を入力しても反応がなくなってあせるぜ。
633sage:2009/12/05(土) 12:26:13
>>629
> コメントが (* *) なのは何とかして欲しい。
たしかに慣れるまでキモいけど、入れ子に出来るのは最強だろ。
(*
 let hogehoge = ...
 (*
 let foobar = ...
 *)
 ...
*)
634デフォルトの名無しさん:2009/12/05(土) 16:21:45
(*_*) (*ワ*) (*v*) (*o*)
635デフォルトの名無しさん:2009/12/08(火) 23:21:58
F#って2010ExpessEditionで使えないんだろ?

C#ほど普及しないで廃れそうな気がするな
言語自体は面白そうだけど
636デフォルトの名無しさん:2009/12/08(火) 23:48:00
そんなガチで普及させる気もともとないだろ。
.NET 使えばいろんな言語の相互運用できるよっていうポーズと、
リサーチの連中が作ったやつがなんか話題呼んでるみたいだし正式搭載するか
って程度のものかと。
637デフォルトの名無しさん:2009/12/08(火) 23:52:17
クラウドクラウド言ってるし関数型の方が基幹システムなんか作るなら
良さそうな感じするけどな
638デフォルトの名無しさん:2009/12/08(火) 23:58:15
関数型言語はクラウドと相性よさそうだもんな。

普通の企業はGoogleとかMSの検索エンジンを作りたいわけでもないので、
目に見えてメリットがあるような要素がないと飛びつかないだろうね
639デフォルトの名無しさん:2009/12/09(水) 05:49:53
C#との相互運用の方法を分かりやすくマニュアルにすれば、
使う人は使うようになると思うな。
C#からF#を呼び出す使い方が重要になる。
640デフォルトの名無しさん:2009/12/09(水) 07:07:19
これからメイン開発言語を徐々にF#に移行していく予定。
641デフォルトの名無しさん:2009/12/09(水) 08:44:55
>>635
VS SDKでの対応は続くでしょ?
642デフォルトの名無しさん:2009/12/09(水) 09:12:15
.NET の思想からすると、メインに C#、部分的に F# 使うとかがいい気がするよなぁ。
>>639 の言うとおり、C# からの呼び出し方をもっとアピールした方が。
643デフォルトの名無しさん:2009/12/09(水) 11:20:21
F#のスケールの扱いはどうよ?
それ次第では、C#の一部をF#におきかえられるんだけど。
644デフォルトの名無しさん:2009/12/09(水) 11:32:28
ここで言うスケールって何?
645デフォルトの名無しさん:2009/12/09(水) 11:35:39
F#ってOCamlのライブラリは使えるの?
646デフォルトの名無しさん:2009/12/09(水) 11:48:51
--mlcompatibilityを付けて、
互換ライブラリ(FSharp.PowerPack.dll)をロードすれば使える。
647デフォルトの名無しさん:2009/12/09(水) 11:53:54
>>646
exeを配布する場合はそのdllも添付しないといけないの?
648デフォルトの名無しさん:2009/12/09(水) 11:56:51
F#の追加ランタイムが.NETとは別に必要なので、
それと一緒に配布されている。
649デフォルトの名無しさん:2009/12/09(水) 12:02:46
>>644
マルチンコアでのスケール
650デフォルトの名無しさん: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が出るのにこんなに変えて大丈夫なのか・・・
651デフォルトの名無しさん:2009/12/09(水) 12:43:08
マルチコアもいいけどさErlangのようにマルチマシンで動くようにしてくれよ
Axumがどのくらい実用的に動くか分からないし
652デフォルトの名無しさん:2009/12/09(水) 18:49:31
そのむかしJ#というのがありまして…
653デフォルトの名無しさん:2009/12/09(水) 19:17:44
何その黒歴史?
654デフォルトの名無しさん:2009/12/09(水) 19:20:09
とりあえず日本語テキストどっかから出ないとやる気起きないよう
655デフォルトの名無しさん:2009/12/09(水) 19:21:56
>>654
OCamlの日本語テキスト読んどけば?
656デフォルトの名無しさん:2009/12/09(水) 19:49:49
>>651
COM+
657デフォルトの名無しさん:2009/12/10(木) 00:12:00
button.Click.Add( fun args -> MessageBox.Show("Hello World") )
ボタンにイベントを追加しようとしているのですが、
戻り値がDialogResultでUnitではないと怒られます。
戻り値はいらないのですがどのように書けばいいでしょうか。
658デフォルトの名無しさん:2009/12/10(木) 03:20:49
>>657
MessageBox.Show("Hello World") |> ignore
659デフォルトの名無しさん:2009/12/10(木) 09:51:26
>>658
それスマートですね。ありがとう。
こんなことをやってました・・
button.Click.Add( fun args -> let dm = MessageBox.Show("Hello World") in () ) 
660デフォルトの名無しさん:2010/01/04(月) 00:55:00
あけましてあげ
661デフォルトの名無しさん:2010/01/22(金) 00:13:11
F#なにげに面白いですね。
オブジェクト指向言語から入った人てきには、
こんなに簡素すぎてアレ大丈夫かしらって思ったりするんだが。。

残念なことに良い本がないからなのか、イマイチ中途半端な知識で止まってるのが残念
662デフォルトの名無しさん:2010/01/22(金) 00:16:40
OCamlのテキストすらまともなのないからな
MSにしては珍しく時代を先取りした感じがする
663デフォルトの名無しさん:2010/01/23(土) 10:57:33
近々出るProgramming F# (The Definitive Guide)が翻訳されればいいんだけどね。
664デフォルトの名無しさん:2010/01/23(土) 11:45:00
洋書ってほとんど翻訳されないよな。。
需要が少ないからなんだろうけど。
665デフォルトの名無しさん:2010/01/23(土) 21:17:50
技術評論社の「プログラミングOCaml」買ってきたぜ
666デフォルトの名無しさん:2010/01/23(土) 21:21:15
もうc#はいらないな。
667デフォルトの名無しさん:2010/01/29(金) 08:33:16
CrythのほうのProgramming F# 買った。これ良書だわ。
668デフォルトの名無しさん:2010/01/29(金) 11:54:47
f#って何に使うの?
669デフォルトの名無しさん:2010/01/29(金) 12:23:16
C#だとウンコ漏れる場所をF#でふさぐんだよ
670デフォルトの名無しさん:2010/01/29(金) 12:33:02
このスルーのされ方はJ#以来だな。
671デフォルトの名無しさん:2010/01/31(日) 15:47:50
672デフォルトの名無しさん:2010/02/02(火) 22:20:32
#お前ら
#lightは
#onで使ってんの?
673デフォルトの名無しさん:2010/02/02(火) 23:48:29
使ってる。

アップデートのたびに動作が変わるのでちゃんと確かめたことはないのだが、
こういう認識で良いのだっけ?
.fs がデフォルトで #light "on"
.ml がデフォルトで #light "off"
#lightのみは #light "on" に同じ。
674デフォルトの名無しさん:2010/02/08(月) 00:07:57
675デフォルトの名無しさん:2010/02/11(木) 15:57:52
F#に興味あったけど
VisualStudio2010が重いせいで
興味なくなったわ
676デフォルトの名無しさん:2010/02/11(木) 16:00:20
重いから興味ないとか笑止、所詮その程度の興味
677デフォルトの名無しさん:2010/02/11(木) 16:02:44
なんであんな重いんだろうな
Pen4 2.6GHz 1GBぐらいだと電源ファン唸りっぱなし
Q9400 4GBでも起動すんのに数秒かかる
あんな糞重いGUI誰も望んでないとおもうんだ
678デフォルトの名無しさん:2010/02/11(木) 16:29:52
F#はVS2008用のがある。STD以上が必要だが、
コマンドラインだけでいいならVS2008なしでも導入可能だよ。
679デフォルトの名無しさん:2010/02/11(木) 16:56:43
さわって満足するだけのような用途じゃないので
コマンドラインは無理っす
680デフォルトの名無しさん:2010/02/11(木) 17:02:29
Alt+Enterでコンソール実行って便利すぎるもんな
681デフォルトの名無しさん:2010/02/11(木) 17:30:10
F#の生産性はC#と比べてどうなの?
C#より優位性ある?
682デフォルトの名無しさん:2010/02/11(木) 17:48:25
.NETなんだから適材適所で使い分ければよろし
683デフォルトの名無しさん:2010/02/11(木) 18:10:32
その適所がイマイチ見えないんだよな。
684デフォルトの名無しさん:2010/02/11(木) 18:24:34
見えない物を_に使う必要はない
使いこなせるかどうかは使う人間次第
685デフォルトの名無しさん:2010/02/11(木) 18:27:10
そんな風に突き放されると勉強してみようかなという気も起きなくなる
686デフォルトの名無しさん:2010/02/11(木) 18:32:23
>>679
IDEのサポートといってもほとんど何も無かったと思うけど。
どんな用途なんだか。
687デフォルトの名無しさん:2010/02/11(木) 18:33:31
勉強もしてないのに適所なんて見えるかよ
688デフォルトの名無しさん:2010/02/11(木) 18:40:06
何に使えるのかもわからん物を勉強するのは趣味人だけだろ
689デフォルトの名無しさん:2010/02/11(木) 18:43:44
適材を完全に理解して始めて適所が解るんだよ
かっこつけないで最初から「F#のメリットって何?」って聞けばいいじゃん
690デフォルトの名無しさん:2010/02/11(木) 18:47:48
特定の実装パターンやアルゴリズムのみ、みたいな局所的な利用であれば
メリットも解るんだけども、モジュールを丸々F#で書いてもいいと思える
ほど生産性の高い言語には見えないんだよな。

そもそも関数型言語のコードって、書く分にはいいけど読みにくくない?
691デフォルトの名無しさん:2010/02/11(木) 18:55:10
VS2010にF#のるから、そろそろまともな解説書が出て欲しいな。
そしたら本気出す
692デフォルトの名無しさん:2010/02/11(木) 19:16:24
>>690
F# は見ただけでまだタッチしてないが、他の関数型言語でなら、
一つ一つの関数の定義に用いるコードが自然と短くなって、
むしろ見通しがいい。

ただ、ひとつの関数に複数の機能やフロー全体を気軽に盛り込もうとすると、
たいていは酷く読みにくくなる。
これは手続き型言語でも言えるが、関数型は比較してその傾向が高い。
693デフォルトの名無しさん:2010/02/11(木) 19:21:26
>>690
その超局所的な利用が F# の意義だと思うよ。
F# 単体で使われることはないと思う。

別に、C# を置き換えるための言語じゃないから、
C# よりも生産性高くなくても別にいい。
694デフォルトの名無しさん:2010/02/11(木) 19:28:14
関数型はステートを持たない事だから。
入力->出力になるから、いくらでも分解して並列処理できるってメリットあるわけだ。
でも、その性質を効果的に利用できる分野ってなんだろうか。
695デフォルトの名無しさん:2010/02/11(木) 19:40:47
>>693
だとすると、C#と混在で使えるようにならないと実用は苦しいな。
言語の境界=モジュールの境界な現状では超局所的利用そのものが難しい。
696デフォルトの名無しさん:2010/02/11(木) 19:52:49
まあ、いいんじゃないかな。
もともと Research の言語だし。
2010 でも Visual F# 単体リリースないし。
その程度の位置づけ。
697デフォルトの名無しさん:2010/02/11(木) 20:20:43
つうか、C#でできることはほとんどよりエレガントに短くかけるだろ(´・ω・`)
698デフォルトの名無しさん:2010/02/11(木) 20:23:28
短けりゃいいってもんじゃないし。
699デフォルトの名無しさん:2010/02/11(木) 20:25:40
C#とF#をひとつのファイルにかければいいのに
700デフォルトの名無しさん:2010/02/11(木) 20:51:37
確かに。短い記述は必ずしも読みやすい記述とイコールじゃないよね。
書いたときはスッキリして美しいと思ったコードが後で見たら???って事あるよな。
これは関数型言語だけの話じゃないけど。

なんちゅうか、関数型の方が書き手を選ぶというか、よりセンスを問われる感じがする。
書き慣れてない人にに使わせると大火傷しそう。
701デフォルトの名無しさん:2010/02/11(木) 21:09:14
F#で作ったライブラリをC#から呼び出せばいいじゃん
702デフォルトの名無しさん:2010/02/11(木) 21:38:42
>701
それだとモジュール丸々F#で書く事になるだろ。
C#よりF#が適している状況はもっと限られていて、プログラムモジュールよりも
コンテキストが狭いんじゃないか、という話をしてる。
703デフォルトの名無しさん:2010/02/11(木) 21:42:35
>>702
なんでモジュール丸ごと書いちゃダメなわけ?
その理由を先に行って貰わないと
704デフォルトの名無しさん:2010/02/11(木) 22:08:09
>>702
狭くないよ

C# + WPF で GUI 作って、バックでの計算は F# でってのは違和感なくできる。
705デフォルトの名無しさん:2010/02/11(木) 22:10:29
C#よりF#が適してない状況って何よ?F#なら関数型でもオブジェクト指向でもかけるやん。
周りの開発者のレベルが低くて関数型とかを使いこなせんとかは除く。
706デフォルトの名無しさん:2010/02/11(木) 22:15:22
生産性とか言ってる時点でよく解ってないんだろ
707デフォルトの名無しさん:2010/02/11(木) 22:27:46
・Cよりちょっと遅いぐらいのスピードで走る
・.NETのライブラリを使える
・他の言語から呼び出せる
・コンパイルしなくてもスクリプトで使える

もう俺なんかこれだけでウホッって感じだ
708デフォルトの名無しさん:2010/02/11(木) 22:34:23
>>707
まだ最適化があまり発達してないから、実際には C# よりもスピード遅いな。
コンパイルされたコードを見ると、関数型の特徴を実現するために
余計なクラスが大量に作られていたりする。

まぁそれで問題になるようなものには、そもそも .NET は使わんが。
709デフォルトの名無しさん:2010/02/12(金) 01:06:37
F#使ってオブジェクト指向で書こうって発想が既に意味不明。
「書けます」ってのはわかるけど、オブジェクト指向中心で書くなら
明らかにC#のほうがスッキリ記述できるわけで。
手段と目的がひっくり返ってね?

ちょっと前にも書いてる人いたけど、関数型の設計/記述の方が
スマートに書ける状況って特定のパターンにハマった時だけでしょ。
だったらそこだけに適用しようとするのは道理だと思うんだけど。
710デフォルトの名無しさん:2010/02/12(金) 01:11:05
VS2008用 ver.1.9.9.9
Microsoft 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
711デフォルトの名無しさん:2010/02/12(金) 01:19:20
F#仕事に使いたいって言っても
1秒で却下されるだろうな
712デフォルトの名無しさん:2010/02/12(金) 01:36:50
>>710
VS2010向けのはruntimeだけでコンパイラもInteractiveも入ってなかった。
こっちからVSごとダウンロードをしてくれ。
http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx
713デフォルトの名無しさん:2010/02/12(金) 02:03:54
>>704
UIの裏で動いてるのが本当に計算的な処理だけならF#もよさそうだけど
IOやら状態管理やらがあるのが普通なわけで。
そういうのはF#ですっきり書ける気がせんのだよなあ。
714デフォルトの名無しさん:2010/02/12(金) 08:12:44
MSDNにもドキュメントがあがってました。翻訳はまだまだですが一応読めます。
ttp://msdn.microsoft.com/ja-jp/library/dd233154(VS.100).aspx

ビジュアルF番号ってなんだよ〜

C# から F# の呼び出しは、これまでモジュールやネームスペースの扱いが、
ころころ変わってたのであんまり話題にできなかった。
715デフォルトの名無しさん:2010/02/12(金) 08:17:28
だからさーオブジェクト指向はデータ構造やその処理についての区分け、カプセルか、ポリモーフィズムについて利点があって、関数型はイミュータブル、処理の合成、簡潔な記述、容易な平行性の適用などに利点があって両者は混在可能。
そして、F#の強みはそれらの容易な統合を.NET上でできるところ。
716デフォルトの名無しさん:2010/02/12(金) 17:35:13
ttp://stackoverflow.com/questions/478531/call-f-code-from-c/478557
汚ねえ……
同じ.NET言語なのにまるでffiだな
こんなに汚くて面倒なのでは、単純で疎な結合で済む程度の相互運用以外は
非現実的なのでは
717デフォルトの名無しさん:2010/02/12(金) 17:44:33
C系は相変わらず汚ねえなぁ・・・
718デフォルトの名無しさん:2010/02/12(金) 17:44:51
F#のListやMapを直接C#から扱うとそうなるな。
スマートにやりたいなら IEnumerable<T> を seq<T>にマップするのがよい。
F#2.0(CLR4.0対応版)からTupleがSystem.Tuple(mscorlib)を使うようになったので、
互換も取りやすくなった。
719デフォルトの名無しさん:2010/02/12(金) 17:53:31
これだとC#側にFSharp.Coreへ直接の依存がない。
-- 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);
720デフォルトの名無しさん:2010/02/12(金) 18:00:07
>>719
ありがとう、それならマシだね
F#側のカリー化された関数を、C#側で普通の関数のように呼べるのか
721デフォルトの名無しさん:2010/02/15(月) 00:49:21
関数型に対応するにしても、なんでOCamlなんて残念な言語を採用しちゃったんだろうな。

あーあ、がっかり。

中途半端なIronなんちゃらじゃなくて、Scheme#とHaskell#をMSが作ってくれないかな。。
722デフォルトの名無しさん:2010/02/15(月) 05:38:54
SchemeだとS式の不評さと継続の扱いが、
Haskellだと遅延評価の最適化に問題がある。

現時点で、ベンダが自分の所の言語のひとつとして採用する分には、
OCamlは割と妥当な選択だと思うけどね。納得できる。

十年先は、また違う展開になってるだろうけど。
723デフォルトの名無しさん:2010/02/15(月) 08:11:34
OCamlが残念とか・・・
724デフォルトの名無しさん:2010/02/15(月) 09:23:11
オッカムル最強伝説(´・ω・`)
725デフォルトの名無しさん:2010/02/15(月) 16:53:29
Schemeみたいながっかり言語より
OCamlの方がいいだろ
726デフォルトの名無しさん:2010/02/16(火) 00:35:30
OCamlの残念ポイント

「let rec」

コンパイラが出来ることを人にやらせる。
これによってバグを抑制出来るのならばよいが、単に冗長なだけ。

こういう無駄をみると、他にもたくさん言語仕様の中に無駄が潜んでいるだろうなと思っちゃう。
あーあ、残念。
727デフォルトの名無しさん:2010/02/16(火) 01:16:04
下みたいにrecの有無で結果が変わる場合もある。
束縛の再定義が嫌な人もいるだろうけど、個人的には便利。

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)
728デフォルトの名無しさん:2010/02/16(火) 01:24:18
多かれ少なかれ、現在存在するどの言語にも、
その手の妥協はあると思うけどね。
大事なのは利点と欠点のバランスじゃない?
729デフォルトの名無しさん:2010/02/16(火) 02:50:31
recの有無で結果が変わるなんて、明らかにバグの温床だよな。
730デフォルトの名無しさん:2010/02/16(火) 04:33:53
>>726
それを言われると let, let*, letrec, letrec* なんてある Scheme の立場が……
まあ実際はあればあったで使い分けるんだけど
731デフォルトの名無しさん:2010/02/16(火) 07:18:21
rec って、その関数は再帰的に評価しますよっていう、
プログラマに注意を促す印だろ。
732デフォルトの名無しさん:2010/02/16(火) 07:42:17
>727
これどんなふうに結果変わるのさ?
recは型推論のためにあると聞いたが…
733デフォルトの名無しさん:2010/02/16(火) 10:01:04
recはリカーシヴの意、定義自身が定義内から可視になる。
734デフォルトの名無しさん:2010/02/16(火) 10:03:35
入門書、入門に適したweb
おしえてくだされ
735デフォルトの名無しさん:2010/02/16(火) 10:10:18
いや、わざわざrecを明示的に指定させる理由って何さ
736デフォルトの名無しさん:2010/02/16(火) 10:17:28
Haskellみたいにletrecの意味のlet一本槍でいいだろってこと?
737デフォルトの名無しさん:2010/02/16(火) 19:17:42
738デフォルトの名無しさん:2010/02/16(火) 19:22:50
再帰する関数とそうでない関数を区別したいと当時考えたからでしょ
一方でHaskellは無限ストリームを使う点からしても再帰とそうでないものを区別する文化じゃないし
そもそも >>726 が言う言語仕様の無駄って何だ。let recが無駄ならletも無駄だわなJK.
ML系以外には殆どないんだもの。

そんなどうでもいい差異よりも気になるのは例えば
・明らかに推論できる型も推論できないその辺の言語たちのことか
・外から呼べるようにするためにはpublicとかstaticとかfinalとか常に書かなきゃならんとか
・templateとかいうキーワードがないと多相関数も書けんとか
・オブジェクトがないと手続き抽象すらできないとか
・無駄にカッコが多いとか
ぱっと見でも他の言語でそういう話はいくらでも出てくるのに、
OCamlにケチつけるところがrecってあたりがしょぼい。
mli/signature書くのは面倒とか、functorってややこしい割に使えねえとか、
年々研究者が作ったわけのわからん機能がなされるとか、そういう話ならまだわからんでもないが。
739デフォルトの名無しさん:2010/02/16(火) 19:26:20
Twitterでぼそぼそ愚痴をこぼすよりましだが、できれば2〜3行でたのむ。
740デフォルトの名無しさん:2010/02/16(火) 19:30:48
まあそういわずもっと煽っておくれよ
741デフォルトの名無しさん:2010/02/17(水) 21:45:21
中、読んでないけど let rec について Newsgroup でも話題になってたみたいね。

The need to specify 'rec' in a recursive function defintion
http://groups.google.com/group/fa.caml/browse_thread/thread/0d579e64dd00daff?pli=1
742デフォルトの名無しさん:2010/02/18(木) 08:21:29
初めのほうだけ読んだが、構文的に見たら再帰だとわかるのだとしても
recはλ理論でいうYコンビネータを呼び出しているという意味付けがある
っていうのがocaml界での認識ってことらしい
743デフォルトの名無しさん:2010/02/28(日) 19:37:55
>>739
どうみてもTwitterのほうがましだろwwww
文句あるなら恥ずかしがらずにRTしろwwwww
744デフォルトの名無しさん:2010/02/28(日) 19:59:12
>>734
web記事かなり増えてきたけどメモ書きレベルのゴミばっかりだな
ぶっちゃけOCaml互換・非互換から.netまで自由自在となると相当大変だが。
市販本3冊くらいあるけどドンシメの名前がある奴で問題ない
付属ドキュメントは見難いがMSDNが微妙に充実してるな
745デフォルトの名無しさん:2010/02/28(日) 23:33:41
>>744
充実には程遠いってのならわかるが、ゴミとは手厳しいね。
なぜにゴミと言い切る?ゴミでないためにはなにが必要?
746デフォルトの名無しさん:2010/03/01(月) 00:45:31
英語なら前からごみじゃない記事も出てるだろ。
要はそれを読めないお前がゴミだってことだ.
747デフォルトの名無しさん:2010/03/17(水) 22:51:24
F#の本がでるようです。どうなんだろ。
http://www.amazon.co.jp/dp/4777515001/
748デフォルトの名無しさん:2010/03/17(水) 23:00:32
すでに出てるだろ。
ちなみにカス本だった。
749デフォルトの名無しさん:2010/03/17(水) 23:01:58
現状だとOCamlの日本語テキスト買うのが吉かと
750デフォルトの名無しさん:2010/03/17(水) 23:13:50
F#はどういうプログラムに向いていますか?
751デフォルトの名無しさん:2010/03/18(木) 00:01:12
.Netで関数プログラミングをやりたい人向け
752デフォルトの名無しさん:2010/03/21(日) 22:28:12
>>747
それカス本すぎる。
まぁしかし、技術本の半分以上はカスだよな。
この世界で良い本はそんなにないんだよな・・・
753デフォルトの名無しさん:2010/03/21(日) 23:38:22
洋書だがProgramming F#はかなりの良書。
754デフォルトの名無しさん:2010/03/25(木) 12:05:35
尼で「F#」で検索すると、 「洋販ラダーシリーズ」 なる高校レベルの
英語で、日本のあれこれを紹介しているシリーズが多数ヒットする

なにこれwww
755デフォルトの名無しさん:2010/03/29(月) 04:45:47
検索しにくい
756デフォルトの名無しさん:2010/03/29(月) 18:28:24
ふつう F# だろ、F#で検索する状況が思い当たらない
757デフォルトの名無しさん:2010/04/06(火) 04:14:15
二年くらい前にExpert F#とFoundation of F#買ったけど積読したままHaskelllに浮気してしまった
758デフォルトの名無しさん:2010/04/06(火) 07:31:48
.NETように主にコード書いてるからなぁ・・・
ナイスなHaskell.NETキボン。
759デフォルトの名無しさん:2010/04/13(火) 15:43:10
lispをだいたい勉強終わったぐらいなんですが,
OCamlの入門としてお勧めな本はどれなのでしょうか
760デフォルトの名無しさん:2010/04/13(火) 21:52:31
>>726
ああ、これ自分もしょぼいと思ったよ。理論・理屈は置いて
761デフォルトの名無しさん:2010/04/17(土) 21:02:25
>>759

普通に

『プログラミング in OCaml』
五十嵐 淳 (著)

じゃない?

それとスレこっちじゃね↓

関数型言語ML (SML, OCaml, etc.), Part 6
http://pc12.2ch.net/test/read.cgi/tech/1245017721/

まぁ、オレはLispの後、OCamlを中途で投げてHaskellに行ったけど・・・
762デフォルトの名無しさん:2010/04/17(土) 21:20:45
>>761
ちなみにOCamlはどこで嫌になったの?
763761:2010/04/17(土) 22:13:21
>>762

OCamlの本(>>761ではなく『プログラミングの基礎』の方)を読んでたときに
中々頭入らなくて、そんな時にHaskellの本読んだらスーッと入ってきたの
で、そこからHaskellに乗り換えちゃった

だから言語が合わなかったのか書籍が合わなかったのかちょっと分からん
764デフォルトの名無しさん:2010/04/29(木) 18:48:19
>>1
F#自体に圧倒的なメリットがなければ、無料の開発環境がないんじゃ誰も使わないだろ。

MSはF#をどうしたいんだろうな。Visual F# Express 出せよ。
765デフォルトの名無しさん:2010/04/29(木) 18:56:49
Visual F# Expressを出されても他言語と連携できないならあんまりいらない
766デフォルトの名無しさん:2010/04/29(木) 19:02:41
連携以前に、まず単体で使ってみたいだろ。
767デフォルトの名無しさん:2010/04/30(金) 22:30:35
しかし、単体では実用性に乏しいのが事実。

F#(というか関数型言語全般)は書くときは書き易いが、読みにくいな。
コードの意図を読み解くのに時間がかかるというか。
これは慣れで解決するものだろうか。
768デフォルトの名無しさん:2010/04/30(金) 23:05:21
使ってみなければ、自分の用途で実用に乏しいかどうかを判断できないだろ
769デフォルトの名無しさん:2010/05/01(土) 14:55:23
単体で使うならスクリプト書くくらいがいいとこか

スクリプト書くくらいならIDEなんかいらん、コンソールで十分
770デフォルトの名無しさん:2010/05/01(土) 15:13:16
コンソールでスクリプト書くって、edlinとか使うの?
771デフォルトの名無しさん:2010/05/02(日) 13:18:05
Programming F#の和訳でるってほんと?
772デフォルトの名無しさん:2010/05/02(日) 23:42:34
ホント
773デフォルトの名無しさん:2010/05/06(木) 03:02:07
VS2010でF#入ったんですけど、これ何ですか?
774デフォルトの名無しさん:2010/05/06(木) 08:26:32
MS版OCaml
775デフォルトの名無しさん:2010/05/06(木) 09:59:50
MSは次から次へと。。。ちゃんと面倒見る気あんのかね
776デフォルトの名無しさん:2010/05/06(木) 10:02:48
だめだと思ったら切り捨てるだけじゃん
いつものこと
777デフォルトの名無しさん:2010/05/06(木) 10:28:22
Trust me.
778デフォルトの名無しさん:2010/05/06(木) 10:32:21
高校生にうそつき呼ばわりされる鳩山乙
779デフォルトの名無しさん:2010/05/29(土) 16:33:27
>>764
Visual Studio Shell + F#
780名無しさん@そうだ選挙に行こう:2010/07/11(日) 19:04:12
>>771-772
ほんとに出るんだ(978-4-87311-466-8)

8月発売か
もう原書持ってるから買わんけど
781デフォルトの名無しさん:2010/07/19(月) 08:04:48
F#にはポインタありますか?
782デフォルトの名無しさん:2010/07/19(月) 10:24:34
783デフォルトの名無しさん:2010/07/19(月) 10:36:31
784デフォルトの名無しさん:2010/07/21(水) 09:25:49
>>782
サルまばたきしやがる
785デフォルトの名無しさん:2010/07/21(水) 12:58:13
何を今さら
786デフォルトの名無しさん:2010/07/23(金) 11:23:35
同じプロジェクト内でC#とF#、混在してかけるようにして欲しいなぁ・・・ソースファイルは分けていいから.(´・ω・`)
787デフォルトの名無しさん:2010/07/24(土) 08:21:55
粗粒へしょんには複数のプロジェクトが入る
788デフォルトの名無しさん:2010/07/24(土) 12:10:43
んなこと知っとるわ
789デフォルトの名無しさん:2010/07/26(月) 10:44:05
C++/CLRの代わりに使うものっていう位置付でいいの?
790デフォルトの名無しさん:2010/07/26(月) 11:20:51
全然違う
791デフォルトの名無しさん:2010/07/26(月) 19:35:11
仕事でバリバリ使うとよろしい
792デフォルトの名無しさん:2010/08/14(土) 01:19:21
inlineで関数定義すると算術演算もあらかたGenericにできるのな。これ2.0から?
793デフォルトの名無しさん:2010/08/21(土) 22:38:19
今月、プログラミングF#(日本語訳)が出版されるからうれしい。
794デフォルトの名無しさん:2010/08/25(水) 11:58:33
すれたてたものだが、3年かけてやっと793か・・・(;´Д`)
言語としてとてもナイスだと思うんだが実践で使われるのはまだ少ないのかのぅ・・・
仕事場で鋭意普及中。
795デフォルトの名無しさん:2010/08/25(水) 13:21:33
コンピュータ言語ヲタが喜ぶ機能が揃ってても、普通のプログラマには
何がうれしいのかさっぱりなんだと思うよ。
796デフォルトの名無しさん:2010/08/25(水) 18:54:32
こういう事を実現するのに他の言語だとこうだけど、F# ならこんな風にプログラムできる、
などと比較して利点を示さないと新言語の魅力はなかなか伝わらないね。
F# に限らんけど。
797デフォルトの名無しさん:2010/08/25(水) 19:47:22
普通のプログラマはRubyでも拒絶反応起こすからな
798デフォルトの名無しさん:2010/08/25(水) 19:55:34
2007年ならネーミングはF#7にしておくべきだったな
799デフォルトの名無しさん:2010/08/25(水) 23:24:17
>>793
明日発売のようですね。
http://www.amazon.co.jp/dp/4873114667
>プログラミングF#
>出版社: オライリージャパン (2010/8/26)
>発売日: 2010/8/26
800デフォルトの名無しさん:2010/08/26(木) 00:16:36
どーいう人にメリットあんの?F#は
801デフォルトの名無しさん:2010/08/26(木) 00:27:38
遊びたい人
802デフォルトの名無しさん:2010/08/26(木) 00:51:02
マルチコアが普通になってきたから、
並列化にすることの恩賜が増えているのは事実。

将来コア数がどれぐらいになるかわからんけど、
今の型落ちPCですら4コアあるからね。
803デフォルトの名無しさん:2010/08/26(木) 01:57:40
より宣言チックにかけるのは万人にとってメリットあると思うけど実際にそれを生かせる人はどんぐらい入んのかね・・・
うちの会社だと2割居るかどうかかな・・・
804デフォルトの名無しさん:2010/08/26(木) 04:39:39
MSってだけで虫唾が走る
805デフォルトの名無しさん:2010/08/26(木) 07:29:04
>>804
> MSってだけで虫唾が走る

それは MS の商売気質に対してだろ
Microsoft Research は MS の商売関係なく、
F# を始め広範囲にかなり面白いことを色々やってるぞ

Haskell に多大な貢献をしたのも MSR の人だし
806デフォルトの名無しさん:2010/08/26(木) 07:59:44
そもそもなんでMSに虫唾が走る人がF#のスレにきてるん
807デフォルトの名無しさん:2010/08/26(木) 08:21:59
知らなかったから
808デフォルトの名無しさん:2010/08/26(木) 20:10:45
唾を吐くため
809デフォルトの名無しさん:2010/08/30(月) 15:02:07
emacsのタグジャンプの変な環境でlisp使うより
VisualStudioの抱負なデバック環境で使える言語は魅力
810デフォルトの名無しさん:2010/08/30(月) 16:01:21
悔しいが同意だ
Eclipse + Scalaには期待してる
811デフォルトの名無しさん:2010/08/30(月) 16:44:04
プログラミングF#
これの感想はないのか?
812デフォルトの名無しさん:2010/08/30(月) 20:44:48
英語版しかよんでないけど、非常にコンパクトに網羅してあって良書と思われ
813デフォルトの名無しさん:2010/08/30(月) 20:53:54
C# と F# ってどう違うの?
似たようなもん?
814デフォルトの名無しさん:2010/08/30(月) 21:41:24
.NET Framework 上で動作するが、言語仕様としては全く違う
C# と VB.NET の違い以上に違うし、VB.NET と C++/CLI 以上に違う

要するに、MS が作った他の .NET 系言語とは似たところがほとんど無い
815デフォルトの名無しさん:2010/08/30(月) 22:34:27
J# w
816デフォルトの名無しさん:2010/08/30(月) 23:12:48
フレームワークといいながら関数型言語ないから糞って言われないために
作ってやったぜって感じがしなくもない
817デフォルトの名無しさん:2010/09/04(土) 06:21:00
>>805
Microsoft Researchの技術者あれはどうやって飯食ってんだ?Microsoft に雇われてるんだよね?
研究部門なのか?

まあ多分Microsoft Researchに限る話じゃないんだろうが、Microsoft的には
818デフォルトの名無しさん:2010/09/04(土) 10:54:28
だから研究してんだろ。お前は研究がどういうものかわかってるのか?
819デフォルトの名無しさん:2010/09/04(土) 11:01:30
お遊びw
820デフォルトの名無しさん:2010/09/04(土) 12:02:50
>>817
MS は世界で一番研究予算使ってる IT 企業。
もちろんそもそも金持ってるってのもあるけど、研究予算比率むちゃくちゃ高い。
821デフォルトの名無しさん:2010/09/04(土) 12:16:02
そもそも研究部門持ってるIT企業ってどのくらいあるの?
822デフォルトの名無しさん:2010/09/04(土) 12:47:41
IT企業かどうかは別としてNECは研究所廃止したなあ
823デフォルトの名無しさん:2010/09/04(土) 13:43:28
亡国だしなー
824デフォルトの名無しさん:2010/09/04(土) 17:13:25
実のところ市場独占率高いほど研究費用投じてイノベーション起こそうとするっていうしね。
独占率低いと、業界他社との戦いでいっぱいいっぱい、
独占率高いと、今の業界に的ないから、技術革新で状況ひっくり返されるの畏れて自分で革新する。
NEC も、国内 PC 市場独占でやってた頃は研究に投資してたけど、今はもう・・・
825デフォルトの名無しさん:2010/09/04(土) 17:33:04
F#で引数にアクセス制御が書けるのですが、何のための仕組みなのでしょう?

let private f (private x : int) (private y : int) : int = x + y
826デフォルトの名無しさん:2010/09/04(土) 17:46:29
ニュージーランドがピンチだにゅ
827デフォルトの名無しさん:2010/09/04(土) 17:47:27
>NEC も、国内 PC 市場独占でやってた頃は研究に投資してたけど、今はもう・・・

なんかイノベーションってあったっけ?
828デフォルトの名無しさん:2010/09/04(土) 18:00:14
出来なかったからDOS/V機に・・・
829デフォルトの名無しさん:2010/09/04(土) 18:14:01
AGDCとかEEGCとか当時としてはよくできたグラフィックチップだった
830デフォルトの名無しさん:2010/09/04(土) 18:30:29
SHとかPowerVRとか
831デフォルトの名無しさん:2010/09/04(土) 18:36:35
国内でチマチマやっててもなぁ
832デフォルトの名無しさん:2010/09/04(土) 19:13:46
SHは日立だろ。

今じゃ同じ会社だが(NECエレとルネサスは合併しました)。
833デフォルトの名無しさん:2010/09/04(土) 20:41:47
NECと日立を、富士通と東芝を、
ってくっつけていかないと
世界で戦えずに国内でつぶしあうだけになっちゃうから
さっさとなんとかしてほいい
834デフォルトの名無しさん:2010/09/04(土) 21:25:23
BukkakeとかKaraoke、Karoushiが海外に普及して喜んでいる奴らもいる一方、
ガラパゴス用語だと言って恥だという奴らもでてくる
835デフォルトの名無しさん:2010/09/04(土) 22:08:41
>ガラパゴス用語だと言って恥だという奴らもでてくる
誰が言ってんだよw
836デフォルトの名無しさん:2010/09/04(土) 23:45:29
>>833
日本はソフトウエアに関しては、
ハードウエアのオマケっていう意識が、特に経営層に強いから
たぶん無理じゃないかな。
837デフォルトの名無しさん:2010/09/05(日) 00:29:05
838デフォルトの名無しさん:2010/09/12(日) 06:17:26
つくづくF#に興味ないんだなおまえらw
839デフォルトの名無しさん:2010/09/12(日) 10:00:03
いやーF#、スクリプト、インタラクティブ、コンパイルを絡めてライブラリ豊富な型付き言語でゴニョゴニョ出来るってのは便利だわ(´・ω・`)
840デフォルトの名無しさん:2010/09/15(水) 00:06:50
>>820
WindowsとOfficeで稼いだ金使って研究しまくりだろ
死ぬまでに次の一発を当てないと死ぬw
841デフォルトの名無しさん:2010/09/15(水) 00:10:27
後のIBM出会った
842デフォルトの名無しさん:2010/09/15(水) 01:40:45
あれだけの大企業になると"死ねなくなる"からなぁ
仮に今後20年ぐらい全てのWindowsとOfficeが失敗し続けたら、不採算部門を切り捨ててIBMみたいになるんじゃね。
843デフォルトの名無しさん:2010/09/15(水) 02:07:29
でも、今の MS 支えてるのってひそかに .NET よ。
あの基盤でかい。
デスクトップからクラウドへのシフト起きても開発者の負担少なくまるまる移行できてしまうとか。
844デフォルトの名無しさん:2010/09/15(水) 04:06:15
Google 青年
Microsoft 中年
IBM 老人
845デフォルトの名無しさん:2010/09/15(水) 04:19:56
x でも、今の MS 支えてるのってひそかに .NET よ。
o でも、これからの MS 支えてるのってひそかに .NET かもしれないよ。
846デフォルトの名無しさん:2010/09/15(水) 07:58:56
MSの開発基盤から離れられない会社ってのは多いかもね。
NTではじめの頃から見てみれば上はクラウドから下はWP7までよう揃えたと思うよ。
847デフォルトの名無しさん:2010/09/15(水) 09:22:27
昔、Windows の人気を支えてたのはドライバー回りでハードウェア依存軽減していろんなメーカーのハードでアプリ動くようにしたこと。
今はっていうと、.NET で、3 screens and a cloud で似たようなコードが動くこと。
どっちも、開発者を楽にしてくれてる。
848デフォルトの名無しさん:2010/09/15(水) 09:42:03
MS嫌いな人ってどの辺が嫌いなの
849デフォルトの名無しさん:2010/09/15(水) 10:29:54
全盛期の読売巨人が嫌いだった人は、たとえ落ち目になっても嫌いなまま。
850デフォルトの名無しさん:2010/09/15(水) 13:57:13
>>848
unix由来のツールが動かしにくい点じゃないかな
今は仮想マシンの普及で動作テストにはたいして問題ないけど
851デフォルトの名無しさん:2010/09/15(水) 20:19:55
単に反体制なだけの奴も多いだろ。
852デフォルトの名無しさん:2010/09/15(水) 22:45:13
ばるまーちゃんのつい最近までのことばを考えちゃうと、MSまんせーはできない
853デフォルトの名無しさん:2010/09/15(水) 23:56:35
無条件にマンセーしてると思ってるのってアンチMSだけだろ。
マ板ならまだしも、ム板なんだから技術面で批判すればいいのに
854デフォルトの名無しさん:2010/09/16(木) 00:20:48
forkが無いOSなんて
855デフォルトの名無しさん:2010/09/16(木) 00:28:43
fork がないと GnuWin32 で tar がまともに使えない
でもあんまり困んない
856デフォルトの名無しさん:2010/09/16(木) 02:17:43
tar32.dll
857デフォルトの名無しさん:2010/09/16(木) 02:32:34
F#からCのDLLってどう使うの?
858デフォルトの名無しさん:2010/09/16(木) 02:46:16
F#でもP/Invoke使うことに変わりない。構文はこんな感じ
http://stackoverflow.com/questions/1689460/f-syntax-for-p-invoke-signature-using-marshalas
859デフォルトの名無しさん:2010/09/16(木) 02:50:30
thx!!
860デフォルトの名無しさん:2010/09/16(木) 09:56:27
>>853
体制マンセーなだけの人もいるようですね
861デフォルトの名無しさん:2010/09/16(木) 10:15:53
ユーザ数が圧倒的に多いんだからそういう人も居るさ
862デフォルトの名無しさん:2010/09/17(金) 16:30:33
win33%linux33%mac33%ぐらいにうまくシェア分散しないものか
863デフォルトの名無しさん:2010/09/17(金) 20:33:42
規模効果考えると最悪のパターンだと思うけどなぁ、均等シェア。
864デフォルトの名無しさん:2010/09/18(土) 00:27:37
90% 9% 0.9%くらいでいい。
865デフォルトの名無しさん:2010/09/25(土) 17:05:45
>>854
NtCreateProcessを使えば、たぶんforkできる。
そもそもPosixサブシステムならforkもある。

一応ある、という程度の話だけど。
866デフォルトの名無しさん:2010/10/23(土) 13:56:29
カレー化っていまいちわかんないんだよね。
867デフォルトの名無しさん:2010/10/25(月) 23:39:11
おいおい カリー化だろ
868デフォルトの名無しさん:2010/10/27(水) 21:22:35
どっちもCurryだけどな
869デフォルトの名無しさん:2010/10/30(土) 17:25:28
マイクロソフトに電話で、F#を開発に使えるか
検討しているのですが、と聞いたことがある。
F# を知らない部署を5件くらいたらい回しに
されたあげく−>最初にもどるだったので
諦めたわ
870デフォルトの名無しさん:2010/10/30(土) 18:16:27
さすがMSKK
871デフォルトの名無しさん:2010/10/30(土) 18:37:33
>>869
そんな問い合わせするんだ!!
「ああ、そうですか?」ぐらいしか言えなくね?w
872デフォルトの名無しさん:2010/10/30(土) 19:05:42
マイクロソフトに、とだけじゃ幅が広すぎる。
一体何処に電話したんだろ。
何処に電話したとしても、質問内容のほうが酷い。
873デフォルトの名無しさん:2010/10/30(土) 19:11:25
たらい回しにされたのはF#を知らないって理由じゃないんだろうな・・・
874デフォルトの名無しさん:2010/10/31(日) 10:37:55
いつ電話したのか知らんが、今なら触ってみればわかるだろ。
875デフォルトの名無しさん:2010/10/31(日) 11:07:36
今度C#でプロジェクト立ち上げるんですけど成功すると思いますか?


俺が電話番でもたらい回しにするわwww
876デフォルトの名無しさん:2010/10/31(日) 11:26:20
そこはたらいまわしじゃダメだろ。
やんわりと「おかしい人避け」しないと。
877デフォルトの名無しさん:2010/11/06(土) 22:20:54
>>869
どの国のMicrosoftに問い合わせたの?
878デフォルトの名無しさん:2010/11/07(日) 11:54:11
韓国だろ
879デフォルトの名無しさん:2010/11/08(月) 00:22:29
問い合わせるなら台湾だろ。F#にも萌えるマスコットがいるかもしれないし。
880デフォルトの名無しさん:2010/11/08(月) 22:24:13
米Microsoft、関数型言語「F#」をオープンソースに
・Microsoft Research Shared Source Licence Agreement → Apache License 2.0
http://sourceforge.jp/magazine/10/11/08/0247250

F# PowerPackもApache License 2.0になった。
881デフォルトの名無しさん:2010/11/08(月) 23:12:31
うーむ。
ここ数日のMSの動きが読めん・・・。
882デフォルトの名無しさん:2010/11/08(月) 23:14:15
もうF#いらね ってことだろ
883デフォルトの名無しさん:2010/11/08(月) 23:29:39
>>869
今こそもう一度問い合わせるべきだなw
884デフォルトの名無しさん:2010/11/08(月) 23:35:50
次はWindowsのオープンソース化がくる。
885デフォルトの名無しさん:2010/11/08(月) 23:41:53
まずはExcelをオープンソース化してください
886デフォルトの名無しさん:2010/11/08(月) 23:41:57
OOoのソース並みに要らないな
887デフォルトの名無しさん:2010/11/08(月) 23:44:36
F#のオープンソース化は別に驚くような事じゃないだろ?
888デフォルトの名無しさん:2010/11/08(月) 23:46:44
一押しアイドルが急に脱いだら驚くだろ。
889デフォルトの名無しさん:2010/11/09(火) 00:11:49
リサーチのMSR-SSLAから適当なOSSライセンスになるのってそんなに珍しいの?
890デフォルトの名無しさん:2010/11/09(火) 02:12:43
もともとDon Symeはオープンソースにしたいって言ってたし、特に驚くことでも無い気はするけど、
そこらへんの事情とか最近のマイクロソフトの動きとか知らない人には奇妙にうつるんじゃね
891デフォルトの名無しさん:2010/11/09(火) 05:35:26
>>886
||>> Libre Office PART1 <<<||
http://hibari.2ch.net/test/read.cgi/software/1288792911/
892デフォルトの名無しさん:2010/11/13(土) 09:10:38
世界の官公庁で、
msoffice -> オープンドキュメント
みたいに、
java -> オープンVM環境
という流れがあると、思っているのだろうか。
893デフォルトの名無しさん:2010/11/13(土) 17:31:38
かつてLAN設備をtcp/ipのかわりにOSIにしてしまった某役所ですね
894デフォルトの名無しさん:2010/11/14(日) 11:18:02
Mono Picking Up F# Support For Linux, Mac OS X, Etc
http://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.
895デフォルトの名無しさん:2010/11/15(月) 05:20:36
>>893
標準規格に合わせただけ
896デフォルトの名無しさん:2010/11/16(火) 19:57:50
Andoroid上のMonoって、iPhoneみたいにARMプロセッサ向けにAOTしたプログラムが動くんだろうか。
それとも、MonoのVMがARMのネイティブコードとして動いてんだろうか。
897デフォルトの名無しさん:2010/11/23(火) 19:25:11
F#というのは1960〜1970年代に科学技術計算に多用された(もちろん今でもよく使われている)
Fortranなる言語に似せて作られたプログラミング言語の名前で、
それで作られたプログラムは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
898デフォルトの名無しさん:2010/11/23(火) 19:31:14
どこから突っ込んだらいいのやら。
899デフォルトの名無しさん:2010/11/23(火) 19:41:07
(スコア:5, すばらしい洞察)
900デフォルトの名無しさん:2010/11/23(火) 20:21:35
ベストアンサーも困ったものだな。

F# の F は、FunctionalのFで、他からの移植でなくて.NetFrameworkから生まれた言語の中では、
初めて関数型言語の性質を持つという特徴を持っています。ただ、関数型だけではなくマルチ指向
なので、ご注意ください。
901デフォルトの名無しさん:2010/11/24(水) 00:22:55
>>897
これはひどい
902デフォルトの名無しさん:2010/11/24(水) 00:28:46
使ったことがないので、「F#って一体どんな言語ですか?」という問いには申し訳ありませんが正面から答えることができません。
しかし、ANo.1の人は何か他のものと勘違いしていないでしょうか。
・F#はFortranには全く似ていません。言語系統的にはML→Caml→OCamlの流れをくんでいます。
・関数型言語というのは、コンピュータ科学的にはλ計算の概念を基礎とし、関数をファーストクラスのオブジェクトとして扱える言語
というのが広い意味での定義です。値を返さないプロシージャ(手続き)に対して値を返すものを関数と呼んだのとは意味合いが異なります。

C言語プログラマーには馴染みのない型推論とか遅延評価とかの興味深い機能がありますが、
それらが実用上どれくらい役に立つかは何とも言えません。

投稿日時 - 2010-11-03 22:12:48
903デフォルトの名無しさん:2010/11/24(水) 00:33:03
ANo.2 がベストアンサーかな

いやいやいや・・・関数型言語が「昔話」なんてのは・・・・
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
904デフォルトの名無しさん:2010/11/24(水) 01:34:17
どの回答にしてももっとすっきりした文章で書けるだろうに、
どうしてこんなに読みにくいのだろう?
905デフォルトの名無しさん:2010/11/24(水) 01:37:05
質問も回答も自演くさいな
906デフォルトの名無しさん:2010/12/23(木) 00:49:50
int f(int x){ return x+1; }
int[] 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);

こっちのが見やすくないか…
907デフォルトの名無しさん:2010/12/23(木) 01:49:30
んあ?C#がいいってこと?
908デフォルトの名無しさん:2010/12/23(木) 12:46:00
Win以外でも使えるMonoの開発環境にF#のフラグインが登場してる。

http://blogs.msdn.com/b/dsyme/archive/2010/12/22/monodevelop-plugin-for-f-now-available.aspx
909デフォルトの名無しさん:2010/12/23(木) 13:37:37
なにこれひっど〜い
910sage:2011/01/02(日) 17:55:38
F#を勉強したいと思っていますが、[実践F#]と[プログラミングF#]のどちらを買おうか迷っています。
C#経験者がF#をみにつけるためにはどちらの本が最適でしょうか。
911デフォルトの名無しさん:2011/01/02(日) 20:14:07
実践F#なんて出版されるのか。買ってみよ。
プログラミングF#は良書ですよ。他はダメダメ
912デフォルトの名無しさん:2011/01/02(日) 21:01:20
Expert F# 2.0 (Apress) というF#作者の本があるが、まだ翻訳されていない。
913デフォルトの名無しさん:2011/01/03(月) 01:32:34
Programming F#は良書。
Real World Functinal Programmingも良書。
914sage:2011/01/03(月) 14:31:03
>>911 >>912 >>913 ありがとうございます。
確かにプログラミングF#は良さそうですが、
私は関数型とか全然分からなくて少し不安です。
目次を見る限り実践F#は関数型初心者にも理解しやすいような
気がしていますが、どなたかお読みになったかたいるでしょうか。
915デフォルトの名無しさん:2011/01/03(月) 20:40:37
twitterのTLみると類推や例が豊富みたいだからいいんじゃないかな。
916デフォルトの名無しさん:2011/01/18(火) 23:51:03
F#が利点がしっくりこない理由
・F#でないと!という利点が見えない
・文法が推測しずらい=書きにくい
917デフォルトの名無しさん:2011/01/19(水) 01:03:25
そこは、テンプレ通りの釣りで「実は F# がしっくりこないんです」だろ。
918デフォルトの名無しさん:2011/01/19(水) 01:04:54
それは元ネタがうちの大学のOBだからあんまり使いたくない
919デフォルトの名無しさん:2011/01/19(水) 01:13:24
F#で書くほうが色々と楽なんだが、インテリセンスがC#のほうがいいのでC#で試し書きすること多し(´・ω・`)
2012ではもう少し賢くしてくれよパトラッシュ(´・ω・`)
920デフォルトの名無しさん:2011/01/19(水) 02:21:34
型推論が強力だったりの都合で無理、
という場所だけじゃなく普通にここは出て然るべきだろ、
というところでも結構IntelliSense動かなかったりするからねえ。
921デフォルトの名無しさん:2011/01/19(水) 10:38:33
今みたいに言語ごとに個別にVS対応してるうちは、F# みたいな(C# VBと比べて)相対的に利用人口少ない言語はどうしても後回しになるのもやむを得ない。
今MSが取り組んでるらしいCompiler as a Serviceが完成して、IDE対応がある程度共通化できるようにならないと厳しいと思う。
922デフォルトの名無しさん:2011/01/19(水) 15:46:33
F#でないと手間のかかること、っていうのがないんだよなー
923デフォルトの名無しさん:2011/01/19(水) 18:42:48
F#でかいてみたが、ついC#っぽく書いてしまいます。。。
924デフォルトの名無しさん:2011/01/19(水) 21:46:58
なれればF#のほうがはるかに早く実装することが出来るぞ(´・ω・`)
925デフォルトの名無しさん:2011/01/20(木) 00:58:29
F#のお試しサービス
http://tryfs.net/
926デフォルトの名無しさん:2011/02/07(月) 09:47:06
F#じゃないと困るということがない、ってのは、
関数型言語全部にいえるんだよな
結局LLみたいなお手軽言語でもないから中途半端だと
927デフォルトの名無しさん:2011/02/07(月) 10:53:58
>>926の心理をプロファイリングしてみた

 ちょっと背伸びしてF#を触ってみたが、自分には理解不能だ
 でもそれを認めるのは嫌だから、F#が中途半端なせいだということにしておく

単なる「酸っぱい葡萄」ですた(END
928デフォルトの名無しさん:2011/02/07(月) 14:08:49
昼間っから乙
929デフォルトの名無しさん:2011/02/07(月) 15:04:40
実際になにか作ろうとすると、言語仕様よりライブラリのほうが影響大きいしね
研究目的とかゼロから全部自作する場合はそうでもないんだろうけど
930デフォルトの名無しさん:2011/02/07(月) 18:20:47
VM上のミュータブルな共通ライブラリーが使えて、
静的な関数型言語の利点もかなり享受できるのが、F#やscala
931デフォルトの名無しさん:2011/02/07(月) 18:23:33
LLみたいにREPLもあるよ
932デフォルトの名無しさん:2011/02/07(月) 22:11:43
いまそこにあるnull
933デフォルトの名無しさん:2011/02/07(月) 23:56:40
C# 4だと面倒だけど、F#なら便利、ってパターンある?
なんか、C#が関数型の特長取り込んで、ほとんどできちゃうような印象があるんだけど。
934デフォルトの名無しさん:2011/02/08(火) 00:16:06
C#に無くて便利なのは、型クラスとパターンマッチングかね
あとは、ML系の(scalaなどより)強力な型推論
935デフォルトの名無しさん:2011/02/08(火) 07:45:42
>933
・パターンマッチング
・ObjectExpression
・AyncWorkflow
・ComutationExpression
・UnitOfMajor
・まともなクロージャー
・TailRecurtion含んだ再帰
・REPL
・discriminated union
・型推論含めていろいろ簡単にかける仕組み

936933:2011/02/08(火) 09:58:17
おー、ありがとう。分からない用語もあるのでちょっと勉強してみます。
937934:2011/02/09(水) 00:43:59
間違えた、"型クラス"じゃなくて"バリアント(判別共用体)"だった、、、
http://msdn.microsoft.com/ja-jp/library/dd233226.aspx#Y508
scalaのcase classのつもりで、なにを取り違えたのか型クラスと書いてしまった、、、
938デフォルトの名無しさん:2011/02/09(水) 04:56:31
>>929
はじめから.netを意識してるし
グルー言語として結構優れてるんだけど
そこが>>935みたいにまったく注目されないんだよなw
.netを利用したお手軽アプリならC#とかLL+OSのapiより簡単に書けるわけだし。
まあguiはC#でやりたいけど・・・w
939デフォルトの名無しさん:2011/02/09(水) 09:50:35
.netが必要となる段階ですでにお手軽でなくなってる
940デフォルトの名無しさん:2011/02/09(水) 09:52:38
だよな
941デフォルトの名無しさん:2011/02/09(水) 10:02:02
何を持ってお手軽かって話だろ。
942デフォルトの名無しさん:2011/02/09(水) 10:33:51
数b隣のコンビニへ行くのに乗用車乗りたくはないだろ
943デフォルトの名無しさん:2011/02/09(水) 10:59:34
その例えで行くと、数メートルとなりのコンビニまで動く歩道があるといったほうがいいだろう。
設置するのにコストがかかるが、あるなら使うわ。
944デフォルトの名無しさん:2011/02/09(水) 20:19:26
他人に配布して使ってもらいたいときに
動く歩道の建設普及促進になるのが良いと考えるか
無駄なコストだと考えるかだろ
945デフォルトの名無しさん:2011/02/10(木) 03:54:23
動く歩道は乗ったらすげーらくちんって聞くけど
乗るまでが何かめんどくさそうだから普通の道で行くわ
ってなりそうだな
946デフォルトの名無しさん:2011/02/10(木) 07:43:13
配布するのが大変って言ってる人は、ただでもわざわざ道路作んのかよってことだし
大変じゃないって人は、言えば作ってくれるんだからそれを使えばいいじゃんってことで平行線だな。
947デフォルトの名無しさん:2011/02/10(木) 12:21:30
.NET3.5以前は入れたくないが
.NET4なら入れても良いと思う
948デフォルトの名無しさん:2011/03/21(月) 11:54:17.56
歩く歩道はニュータウンには標準で付いてくるので、そろそろみなさんニュータウンに移ってください
949デフォルトの名無しさん:2011/03/21(月) 11:56:20.38
わかりました
すぐに引っ越すので、前の住居の数メートル隣のコンビニをニュータウンの引越し先に設置しておいてください
ユーザーからのお願いです
950デフォルトの名無しさん:2011/04/03(日) 15:17:24.83
>>925
なんだこれすげぇ。
951デフォルトの名無しさん:2011/04/07(木) 15:05:28.98
ume
952デフォルトの名無しさん:2011/04/07(木) 18:12:05.39
950でしばらくしたら落ちるんだっけ?
980だっけ?
953デフォルトの名無しさん:2011/04/08(金) 00:10:32.38
>952
985辺りまで安全。立てるのは995前後でおk。
早く立てすぎると埋めるのがかなり面倒だから。
954デフォルトの名無しさん:2011/04/08(金) 00:51:55.43
自分の周りでは結構F#話題に出るんだが、巷では全くはやってないのかね?
955デフォルトの名無しさん:2011/04/08(金) 01:30:12.76
980で落ちる
956デフォルトの名無しさん:2011/04/08(金) 01:35:20.61
Don SymeのExpert F#や、Dean SmithのProgramming F#もあるけど、
Tomas PetricekのReal World Fanctional Programmingは、良さそうだね。
https://twitter.com/murrayondotnet/status/56012406744289280

Robert PickeringのBeginning F#ってどうなんだろう。
どうでもいいが、発行年が2007と2009に集中してるな。
957デフォルトの名無しさん:2011/04/08(金) 07:57:38.01
>956
Real World Functional Programmingは良書(`・ω・´)シャキーン
他のに比べて関数プログラミングって何ぞやってところに多くを割いている。
958デフォルトの名無しさん:2011/04/12(火) 06:23:48.57
>>954
個人的に趣味の範囲で、まだ興味持ってるけど
趣味ですら、ちょっと本格的なアプリつくろうって気にはなんないね・・・
メーリングリストとかFShubもコミュも死んでんじゃん?
959デフォルトの名無しさん:2011/04/12(火) 08:05:45.41
>958
今度客先に出すアプリF#でつくってんだが・・・(´・ω・`)
海外は熱いよ!作りやすいよ!
960デフォルトの名無しさん:2011/04/12(火) 18:49:02.83
Microsoft F# Developer Center
http://msdn.microsoft.com/fsharp
英米の地域ユーザーグループは活発だけど、
全体のやつはあるのかな
961デフォルトの名無しさん:2011/04/22(金) 23:24:52.90
Mono最強伝説
http://ja.wikipedia.org/wiki/XSP_(Web%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC)
962デフォルトの名無しさん:2011/04/27(水) 20:16:33.78
過疎
963デフォルトの名無しさん:2011/04/27(水) 23:28:27.34
仕事で使ってる人って、あんまりいないよね。
みんな何つくってるの?
964デフォルトの名無しさん:2011/04/27(水) 23:39:25.56
うーん、海外だと金融系で使ってるとか言う話も聞くけど、
それも事実なのか、MSR の(MS経営陣に対する)アピール戦略で言ってることなのかいまいちわからない。

なんか、最近のMSRのF#の売り込み方だと、
データ解析&可視化の得意なREPL的な使い方してるのよね。
965デフォルトの名無しさん:2011/04/27(水) 23:50:58.86
今金融系向けの仕事で使ってるお。
といっても今はあくまでもナイスな汎用記述言語としてしか使ってないけど。
金融系の本来の用途としてはDSL的に書けたり関数型ならではで並列を書きやすいってところがポイントかと。これはF#だからというよりもOCamlとかですでにされてるとこだと思うけど。
F#はそれ以外に.NETで強力なライブラリがあったり既存と連携がしやすいこと、F#ならではの言語仕様でいろいろと開発がしやすいことなど技術者さえ確保できるならほとんどの分野で有効だと思うんだけどなー
966デフォルトの名無しさん:2011/04/28(木) 10:48:18.71
問題は技術者を確保できればってところで、保守が必要なものだと自分がいなくなっても
保守できるのかってあたりできびしいものが……
967デフォルトの名無しさん:2011/04/28(木) 15:00:53.64
んーそれでもC#の技術者いるなら2,3週間でまぁ普通に使えるようになると思われ。
その時はC#と同じようなコードの書き方してるかもしれないけれどだんだんF#っぽいコードになってけばいいと思う。
そうするだけの価値はあるよ。生産性とか的に。
968デフォルトの名無しさん:2011/04/28(木) 15:01:39.23
あー2,3週間は教える人がいるならのはなしね。
969デフォルトの名無しさん:2011/04/28(木) 23:49:36.39
C#も生産性高いと思うけどF#ってさらに生産性が上がるの
そりゃ使い方次第だろうけど、そういうポテンシャルを持ってんの?
970デフォルトの名無しさん:2011/04/29(金) 00:25:36.43
>>969
両方あまり知らないんだけど、俺みたいなド素人にでもパッと見で分かる
ようなとこは
・型推論がC#より強力。
・1..10 とか 'A'..'z'とか書ける(C# だとEnumerable.Range()とか使うと思う)
・組み込みで並列計算や非同期計算の機能がある。
・強力な型推論とあいまって、タプルがLLなみに使いやすい。
 単に("this", 1)と書けばよくて、string * intの直積型(タプル)と
 推論してくれる。値として返す場合も型宣言とか要らない。
・同様に、リストやシークエンスのリテラル表記やリスト内包が可能で
 LLなみに使いやすい。
 関数的なconsリストがサポートされていて再帰処理との相性もいいんだけど
 これは関数型を知らないと良さが多分分からない。
・その他パターンマッチ等関数型特有の機能が色々便利、ただこれも関数型を
 知らない人は、使ってみないと多分良さが分からない。
971デフォルトの名無しさん:2011/04/29(金) 00:46:04.20
C 言語から派生してる OOP 言語と、関数型言語から派生してる言語は得意な場面が相補的だから、
C# と F# 両方覚えてそれぞれ得意な場面で使えば生産性上がる
くらいのものだと思うんだけど。
972デフォルトの名無しさん:2011/04/29(金) 02:01:34.24
逆にF#はIDEとの相性の良さを捨ててる感じなので
(その点でC#はIDEでうまく補完出来ない言語要素は入れないようにしてる感もある)
単純なコードの字面だけから測ってF#のほうが上とは
生産性が尺度の場合は言えないなあ。
973969:2011/04/29(金) 08:31:08.39
>>970
レスありがとう
ちょっとだけモチベーション上がった
974デフォルトの名無しさん:2011/04/29(金) 17:18:22.21
プログラミングF#買った
975デフォルトの名無しさん:2011/04/29(金) 17:21:54.99
言語の特徴としてはScalaとF#はそっくりだと思う。

*型推論:
 F#,Scala -> ◯
 C#,Java -> △,×
*代数データ型:
 F#,Scala -> ◯
 C#,Java -> ×
*パターンマッチ:
 F#,Scala -> ◯
 C#,Java -> ×
nullの廃止
F#,Scala -> ◯
C#,Java -> ×
モナド:
F#,Scala -> ◯
C#,Java -> ×
高階関数:
F#,Scala -> ◯
C#,Java -> △,×
変数:
F#,Scala -> デフォルトで破壊できない
C#,Java -> デフォルトで破壊できる
対話環境:
F#,Scala -> ◯
C#,Java -> ×

JavaからScalaへの大移動が始まっているのと同様のことがC#からF#に起こるに違いない!と言うのも本当かもしれない。
976デフォルトの名無しさん:2011/04/29(金) 17:46:43.47
JavaからScalaへの大移動なんて始まってるの
ScalaとF#の比較は乙と言いたい
977デフォルトの名無しさん:2011/04/29(金) 18:45:21.30
△と×の差が大きいんだよなあ。
C#→F#は起こらないとおも。
978デフォルトの名無しさん:2011/04/29(金) 18:59:43.54
C#はラムダ式書けるから楽だよな
979デフォルトの名無しさん:2011/04/29(金) 19:02:37.27
IDEとの連携が微妙だからなぁ
一時期はスクリプトとして使う分にはそこそこよかったんだが
今はpowershellがあるし…
うーむ
980デフォルトの名無しさん:2011/04/30(土) 08:36:37.52
>971
でもC#のほうがF#よりとくいにできるってとこあんまなくね?
partial classとかはちょっと便利かと思うけど。


>972
IDEサポートはC#のほうが上だね。
リファクタとか参照してるところ一覧とかクラス名、メソッド名で一覧からジャンプとか。
でもVSのエクステンションで同じような機能を使えるのもあったから実際使っててそれほど困ってもない。コードの書き方の違いにもよってるのかな。
981デフォルトの名無しさん:2011/04/30(土) 19:16:49.60
次スレ建てんとな
982デフォルトの名無しさん:2011/04/30(土) 19:33:54.53
F#はMSの研究所による関数型言語の.NETへの実装で、MSのメインストリームである
C#が年々改良されていっている以上、F#の便利な機能はどんどんC#へ移植されて
いくんじゃないかと思っている。
なので、C# 6.0くらいになれば、もう汎用言語としてのF#のメリットは消えてるのではないかと妄想。
もちろん、関数型言語としての棲み分けはできるだろうけど。
983デフォルトの名無しさん:2011/04/30(土) 20:42:58.86
次のC#で予定されているasyncなんかそうだよな。
984デフォルトの名無しさん:2011/04/30(土) 20:49:28.51
C#とF#、OOPベースか関数型ベースかって差はどんどんなくなってるけど、
MSリサーチ臭の有無はいまだになくなってないし、そこが棲み分けのポイントじゃないかな。
F#の方が先に色々新しい試みしてて、
C#の方が時間かけてより良い形になってから新機能入れてる感じ。
985デフォルトの名無しさん:2011/04/30(土) 23:39:43.06
>>984 F#のコア言語は1980年代からあるからC#よりずっと洗練されているよ。
クラスベースをメインとするC#では完全な型推論が実装できない事は証明されているし
代数データ型、パターンマッチ、モナドなんかを導入するのも不可能か、不自然な
構文になっちゃうんじゃないかな。
C#4.0ではdynamic型が導入されるしC#は今後は動的な言語の利点を取り入れる形に
なるんじゃないかな。
986デフォルトの名無しさん:2011/04/30(土) 23:55:01.90
969あたりからのC#対F#の流れ勉強になるわ
987デフォルトの名無しさん:2011/05/01(日) 00:06:46.98
80年代からあるから洗練されてるってなんかおかしくない?
普通、古いほど悪習が残るだけで。
988デフォルトの名無しさん:2011/05/01(日) 00:13:52.09
だね。
正直、F#はあまりOCamlを引きづらなくても良かったんじゃないかと思う。
あと
> C#は今後は動的な言語の利点を取り入れる形になるんじゃないかな。
これは的外れ。
989デフォルトの名無しさん:2011/05/01(日) 00:39:24.72
その辺りもリサーチ臭強い原因の1つなのよね。
C#がC++とかJavaから結構練り直してる部分あるのに対して、F#はOCaml過ぎ。

研究用言語をあまり練ってもしょうがないし。
F#を製品化するとか、作り始めた当初は思ってもなかったんだろうけど。
990デフォルトの名無しさん:2011/05/01(日) 00:50:08.49
>>988
> > C#は今後は動的な言語の利点を取り入れる形になるんじゃないかな。
> これは的外れ。

かまわん続けろ
991デフォルトの名無しさん:2011/05/01(日) 01:25:36.87
>>989 確かに構文だけみるとF#はOCaml過ぎて気持ち悪いけど機能ベースで見ると
Scalaとよく似てるよね。偉い人はそれがわからんのですけど。

ジェネリクスや型推論、クロージャなど関数型言語の利点は昔から着々と取り入れられて
来たけど、だんだん限界だよね。型推論の制限は取れないままだし、そのせいで匿名関数も
微妙だし、FParsecのようなパーサーライブラリはHaskellやOCamlでは昔からあったけど
C#では永遠に無理だろうね。
992デフォルトの名無しさん:2011/05/01(日) 01:54:31.34
次スレ建てますよ、テンプレの拡充は次回のスレ建てでお願いします。
993デフォルトの名無しさん:2011/05/01(日) 02:47:57.29
次スレ
【.NET】F#について語れ2【OCAML】
http://hibari.2ch.net/test/read.cgi/tech/1304185609/

お待たせしました。やっと建てられた・・・
994デフォルトの名無しさん:2011/05/01(日) 03:28:07.01

このスレが急に盛り上がってちょっと嬉しい
995デフォルトの名無しさん
>>975 の機能まとめは参考になるので次スレにも貼っていただけないでしょうか。