【.NET】F#について語れ【OCAML】at TECH
【.NET】F#について語れ【OCAML】 - 暇つぶし2ch357:デフォルトの名無しさん
08/10/15 14:47:07
もしかして、今の新しいバージョンのF#って2008製品版もってないと
入れられなくないですか・・・?('A`)

>>356
ほー、参考になる

358:デフォルトの名無しさん
08/10/15 17:36:17
前のバージョンなら Express でも入れられたの?
プラグインとか機能追加系は製品版じゃなきゃ基本無理。


359:デフォルトの名無しさん
08/10/15 22:56:25
よく調べもせず臆面なくそんなレスを…

360:デフォルトの名無しさん
08/10/16 20:30:58
そのための2ch

361:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/16 22:07:12
>>358
2008はもってないんだよね・・・うpでとするいい機会だ

363:デフォルトの名無しさん
08/10/17 07:35:28
>>361
higher kind genericsというやつで、F#の型システムでは再現は無理ぽ。(´・ω・`)
F#もどきで書くと、こんな感じのものが必要。

Arrow<'arr<'a, 'b>>

364:デフォルトの名無しさん
08/10/17 19:13:35
なるほど、非常に参考になった。
Haskellは進んでるな

365:デフォルトの名無しさん
08/10/18 10:44:02
>>357, >>358, >>362
Visual Studio 2008 Shell (integrated mode) Service Pack 1
URLリンク(www.microsoft.com)

366:デフォルトの名無しさん
08/10/18 16:24:25
>>365
Thanx。shell runtime入れりゃよかったのね

367:デフォルトの名無しさん
08/11/01 12:44:35
手続き型べったりの人間には (|>) を多用すると評価順序がわからなくなって混乱するんだぜ

>>123とか

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

とかけば (unit -> unit) unit が10回ってわかるんだが…

368:デフォルトの名無しさん
08/11/03 11:54:03
これでいいんじゃね?
Seq.iter (fun n -> printf "closure %d\n" n) [1..10]

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

ここ見る限り
URLリンク(blogs.msdn.com)

371:369
08/11/15 21:52:50
あーunit -> 'a option のコンテナってことか
ようやく理解できたような
ありがとう

372:デフォルトの名無しさん
08/11/23 10:37:08
C++のvectorみたいなコンテナってある?
Microsoft.FSharp.Collections.ResizeArrayがそうかと思ったら、
Note: an abbreviation for List<'a>て書いてあたよ

373:デフォルトの名無しさん
08/11/23 12:58:16
ResizeArray でいいんじゃないのん?
Microsoft.FSharp.Collections.List<'a> と System.Collections.Generic.List<'a> は別物

URLリンク(research.microsoft.com)

374:デフォルトの名無しさん
08/11/27 09:16:40
ああ、Listって名前だから勘違いしたけどインデックスアクセスはO(1)なんだな


375:デフォルトの名無しさん
08/11/29 21:53:44
System.Windows.Forms.dllを参照したいんですが、.NETのVersion3.5には見つかりませんでした。
フォームを表示するアプリケーションを作る場合、現状では.NET Version2のSystem.Windows.Forms.dll
を参照するしかないんでしょうか?

376:375
08/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:デフォルトの名無しさん
08/12/05 18:55:21
今、日本がピンチです。
URLリンク(messages.yahoo.co.jp)
URLリンク(sora1975.blog88.fc2.com)
リンク先を見て危機を感じるなら、コピペを貼ってください。



378:デフォルトの名無しさん
08/12/11 20:42:09
Foundation of F#の92ページのサンプルってビルド失敗しないか?
IEnumerable.iterで怒られる。iterなんてねーよって。

379:デフォルトの名無しさん
08/12/11 20:46:53
Seqにしたら動いた。。

380:デフォルトの名無しさん
08/12/12 19:54:50
F#の時代がクル━━━(゚∀゚)━━━ !!

正式発表:Visual Studio 2010がF#でシップ予定 - InfoQ
URLリンク(www.infoq.com)

381:デフォルトの名無しさん
08/12/12 20:01:17
WindowsではC++は消え行く運命か?

382:デフォルトの名無しさん
08/12/12 20:23:12
何でそう思ったのか知らんけど、当面は残るから心配する必要は無い。
まぁでも、Windows向けに開発するなら.NETにも触れといた方がいいとは思う。

383:デフォルトの名無しさん
08/12/12 21:48:11
>>380
機能プログラミングって・・・w

384:デフォルトの名無しさん
08/12/12 22:14:33
F#はOCamlのコード書くために使うわ

385:デフォルトの名無しさん
08/12/13 10:57:24
>J#と全く同様の方法で、
ざわ… ざわ…

386:デフォルトの名無しさん
08/12/27 00:41:54
>>384
let ~ andができないのこまらね?

387:デフォルトの名無しさん
08/12/27 06:37:35
今後MFC使う場面ってあるの?

388:デフォルトの名無しさん
08/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) (* ② *)

①と②のところで引数を指定するのにdx=x+dxのようにしてい
ますが普通にx+dxではいけないのでしょうか?こちらでも
同じように動作しました。dx=x+dxの方法には他に意味が
あるのでしょうか?

389:デフォルトの名無しさん
08/12/27 13:28:37
名前指定してるから引数の順番入れ替えても許されるとかそういう利便性の話では

390:デフォルトの名無しさん
08/12/27 14:29:25
>>389
レスどうもです。
やってみました。確かにそういう利便性がありました。
ありがとうございました。

391:デフォルトの名無しさん
08/12/27 18:52:50
>>380
VSでは単独での使用が想定されてないとか
アプリケーションのコアを構築するためとか
どういう意味なのかね。想定場面がよくわからん
だいたいC#VBからF#の関数呼ぶのも一苦労なんだけど。
VSなしじゃ使い物にならなくなるってことかな
CLR上のLL的ポジションでいて欲しかったんだけどなあ


392:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/12/29 07:09:17
>>392
ペタペタできないのか
じゃあ覚える意味あんまりないか

394:392
08/12/29 21:39:23
あー。
念のため言っとくと「F# にはデザイナ ツールが含まれない」てのは VS2010 での話ね。
その次の VS とか、あるいは SP とかで、いずれは提供されるようになるものと思われ。
まあ、だとしても何年後だよって話だが。

395:デフォルトの名無しさん
08/12/29 21:48:45
その次の VS とか、あるいは SP とかで、F#がなくなる可能性・・・

396:デフォルトの名無しさん
08/12/30 00:05:38
.net自体物凄い歴史浅いのに、普遍化しとるねぇ

397:デフォルトの名無しさん
08/12/30 01:21:32
>>393
ごめんこれ釣りなのかどうかわからなくなってきたw

398:デフォルトの名無しさん
08/12/30 01:39:42
F#って型推論のせいでVSのインテリセンスの恩恵とかほとんどなさそうだな

399:デフォルトの名無しさん
08/12/30 01:40:25
>>392
ごめんこれ釣りなのかどうかわからなくなってきたw

400:デフォルトの名無しさん
08/12/30 02:53:51
>>392
普通にかけないんだけどなにが普通なんだ?
let x = 2 and y = 1;;

どういう仕様なんだと思ったけどandの前に改行がいるんだな

401:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/01/06 03:16:50
>>402
なるほど。理解できた。
(None : int)は(None : int option)の誤記だと
思うけど後者でうまくいった。全体に型注釈
をつけても良いんだね。thx。

404:デフォルトの名無しさん
09/01/17 14:45:28
age

405:デフォルトの名無しさん
09/01/23 17:21:26
もうだめぽ

406:デフォルトの名無しさん
09/01/31 17:52:20
とりあえず、Ocamlの開発環境について教えてください。
ライブラリの管理などを含めてノウハウを教えてください。
エディタはこれを使えとか、コンパイルするときはこうしろとか、成果物を配布するときはこうしろとか、
そういう諸々のプログラミング周辺の雑務について知りたいです。

407:デフォルトの名無しさん
09/01/31 22:54:46
関数型が難しいとかわからんとか言ってるヤツってなんなの?
けっこう他の言語はバリバリ使いこなしてるヤツに限ってそういうこと言う
なんかコードも書いてないのにわかんね言ってるように見えるんだけど

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

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

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

プログラマ名乗るんならまずやってみろよと
知りたいのなら知る努力をしてみせろよと
その上でどこがどーゆー風にわからんのか言えと

408:デフォルトの名無しさん
09/01/31 22:57:09
難易度はともかく関数型は実用性が低いから困るんだよ

409:デフォルトの名無しさん
09/01/31 22:57:51
F# イラネ C# でイイじゃんゆうヤツには
精々逃げ切れるようにがんばれよと言っておきたい

410:デフォルトの名無しさん
09/01/31 23:08:58
>>408
言いたいことはわからないでもない
でも F# に限っていうなら使い分ければいいんでないの?
関数型と命令型と OOP と

411:デフォルトの名無しさん
09/02/01 13:50:33
アルゴリズムらしいアルゴリズムを自分で考えて(選択して)実装することなく、
APIを順に呼んでエラーチェックだけするようなプログラムばっか
書いている(書かされている)人には、勉強しようというモチベーションなど
湧かんだろうなー。

412:デフォルトの名無しさん
09/02/01 22:26:24
やぁ、関数型言語っぽいノリになってきましたね

413:デフォルトの名無しさん
09/02/01 23:08:23
>>411
職業プログラマの多くがそれに該当するのではないかと想像するが
それが仕事なんだから許してやってくれ
職業プログラマの世界では、そもそも「車輪の再生産」は悪とされている
自分でコードを書かなければ工数が減るしバグをつくりこむ機会もなくなるからな

414:デフォルトの名無しさん
09/02/01 23:09:59
うちのところはよく使うものも全然共通化してくれないんだけど・・・

415:デフォルトの名無しさん
09/02/01 23:28:05
世の中の「プログラマ」と名乗る人の結構な割合は関数型言語はおろか、
自力でtreeのトラバース程度もやる必要に迫られたことも無く、
2分探査のコードを書けと言われてバグ無く書けないこと位、みんな判ってるさ。
そして、F#を勉強する俺出世確実、とか思ってるやつもきっといない。

416:デフォルトの名無しさん
09/02/02 00:08:16
自分でアルゴリズムを考えるのが楽しいんだよ。それはもちろん。
でも他人がもう作っちゃったプログラムを同じように作ったってしょうがないだろ。
その労力を新しいものを作る事に傾けたほうが効率的だし、
自分が作るということは作ったものに責任を取るということなんだから、
そんな余計な事まで首突っ込んで余計な責任を取ることも無いだろ。

417:デフォルトの名無しさん
09/02/02 00:27:17
コレクションになんか突っ込んダリするだけですめばいいが、そこに永続化とか色んなフィーチャーを盛り込もうとすれば何処かの段階で全てを自分で作った方がきれいにまとまる段階が来ると思うがどうよ。

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

自分で作るのも追っついてるうちはいいが本当に全てを作るわけにもいかずどこまで突き詰め、どこで妥協するのか考える毎日だが。

418:デフォルトの名無しさん
09/02/02 22:11:53
そうなんだよなー
出来合いの API とかじゃ "想定された使い方" しかできん罠
なんかインジェクションしたいってなったらもう自分で組むっきゃないわけで

そんなときにクラスじゃ粒度がデカすぎるって場合も多いんだよね
はばからずに高階のノリでイケるってホント楽(柔軟)でいい

419:デフォルトの名無しさん
09/02/03 00:09:39
>>413
> 職業プログラマの世界では、そもそも「車輪の再生産」は悪とされている
むしろどんどん再生産して儲けてくださいそれが職業プログラマの本分です

420:デフォルトの名無しさん
09/02/03 01:16:29
再生産で儲けるのは三流
俺 一流だから そんなこと しない

421:デフォルトの名無しさん
09/02/03 03:02:26
>>420
「再生産」で儲けることのなにが三流なのか、答えてもらおうじゃないかw

422:デフォルトの名無しさん
09/02/03 12:02:30
儲けて旨い飯が食えりゃどっちでもいいじゃないか。

423:デフォルトの名無しさん
09/02/03 12:13:33
一流は金に困ってなんかいないから、儲けることなんか二の次に考えて新しいことを追い続けられる。

424:デフォルトの名無しさん
09/02/03 12:34:51
何で一流の奴がこんなとこで一流だの三流だのしょうもない議論やってんだよw
俺にできないような、新しい事を追い続けてくれよww

続きはマ板で

425:デフォルトの名無しさん
09/02/03 21:09:42
>>419は皮肉

×車輪の再生産
○車輪の再発明

426:デフォルトの名無しさん
09/02/07 11:05:47
糞スレ

427:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/02/08 08:51:24
MLでYコンビネータを書く話なら、↓の最後にコードが載ってる
私には内容がさっぱり理解できないので、参考になるかどうかは分からんが

URLリンク(www.kurims.kyoto-u.ac.jp)

431:デフォルトの名無しさん
09/02/08 09:55:54
>>427 は、↓にすればコンパイルが通るぞ

let apply1 = function (F f) -> f 1;;

432:デフォルトの名無しさん
09/02/08 11:15:40
あっと、別にfunction使う必要はなかった

let apply1 (F f) = f 1;;

433:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/02/11 02:31:18
のーみそが関数型に染まってくると
「左辺値」「右辺値」という言葉に
妙な違和感を覚えだす

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

てなことを妄想してみたけどどうよ?

438:デフォルトの名無しさん
09/02/11 04:31:13
>>437
概念じゃねーの?

439:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/02/11 09:01:08
>>437
「let x = 1」
これは等式とは思わない方が自然じゃないだろうか。
もともとは数学の論文とかでよく出てくる
「Let x := 1.(xを1と置く。)」とかいう表記を構文にしただけなんじゃないかと想像する。
等式じゃないなら、左辺、右辺とかいう観念はない。

441:デフォルトの名無しさん
09/02/11 09:18:39
おまえら頭いい サイコーだ

442:デフォルトの名無しさん
09/02/11 12:21:03
>>439
>>429 をよく見ろ
> 最終的にやりたいことは、let recを用いずにYコンビネータを書きたい

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

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

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

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

左辺値、右辺値という考え方は、一般に共通の理解を得ている
もの(通念)であり、それらは「概念」と呼ぶのが相応しい
ということかな?

449:デフォルトの名無しさん
09/02/11 14:45:18
>>448
まあニュアンスが伝わればいいんじゃね?

450:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/02/12 07:31:11
f そのものを遅延化してしまう(>>439)のと、
引数 x を追加して遅延の役割をしてもらう(>>443)のと、

どちらがコードの見た目的にやさしいかは明らか。w

452:デフォルトの名無しさん
09/02/13 07:47:47
f (fix f) と fun x -> f (fix f) x って同義じゃないの?

んー、マジで分からん

453:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/02/13 19:54:11
ちょっと言葉足らずなので修正。

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

× x が渡されるまで fix は展開されない。
○ 先に関数を返し、x が渡されるまで fix は展開されない。

455:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/02/15 23:01:31
高尚な議論の最中で流れぶった切ってゴメン

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

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

とかすると、2つ目の type で
Unexpected keyword 'type' in type definition
と怒られる

457:デフォルトの名無しさん
09/02/17 20:14:16
>>456
できなさげ

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

てか例示のコードならタプルでいいんじゃ?

458:デフォルトの名無しさん
09/02/17 22:01:21
ありがと、やっぱ出来なさそうですね。

まぁ、確かにタプルでも機能するんですが、
各要素へのアクセスが面倒なんで
レコードの方が扱いやすいなぁと。

459:デフォルトの名無しさん
09/02/18 01:02:15
.NET 言語なんで C# 基準で考えてしまいがちだが
F# は OCaml ベースなんだぜ?
internal すらぬるい、どうしても外部から隠蔽したいというなら
シグネチャ(.fsi)ファイルを書けばいいじゃないか

と、眠たいので調べもせずにいってみるテスト

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

じつは OCaml は見たことも触ったこともないんだけど、
やっぱ一通り触れてみた方がいいのかな・・・

461:デフォルトの名無しさん
09/02/18 20:18:22
>>259
言い忘れてた
ありがと

462:デフォルトの名無しさん
09/03/04 22:31:36
seq<int> 型に拡張メソッドを加えたいです。

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

これを seq<int> 型の時のみ拡張することは出来ないのでしょうか。

463:デフォルトの名無しさん
09/03/07 03:49:18
これってVisual Studioから使えるの?

464:デフォルトの名無しさん
09/03/07 04:09:35
つかえるよ。
男は度胸。ものは試し。
まずはインストールしてミソ。

465:デフォルトの名無しさん
09/03/07 09:32:33
2008のProでしか駄目でした的な感じなのだが・・・orz
2008 Pro安く売ってないのかね

466:デフォルトの名無しさん
09/03/07 13:05:24
エディション比較ちゃんと見れと
URLリンク(www.microsoft.com)

相変わらず Visual Studio 2008 Shell は知られてないなと
URLリンク(msdn.microsoft.com)

アドインなんだから devenv.exe のあるなしで判断できるだろうと

467:デフォルトの名無しさん
09/03/07 17:19:53
使ってる人もっとなんか書いてくれ
Scala がどうとか言ってる同僚を黙らせたい


…俺? 日本語の本が出てからやるわw

468:デフォルトの名無しさん
09/03/07 23:49:03
F# のことを勉強しようかと思ったが、至るところ null があるって聞いた時点で、萎えた。

469:デフォルトの名無しさん
09/03/07 23:56:45
何を言ってるんだ?おまえは?

470:デフォルトの名無しさん
09/03/08 00:07:37
>>467
どうとか言ってる内容にもよるわけだが、黙らせる方法ってのは。
関数型サイコーとでも言っているのかい?その同僚は。

471:デフォルトの名無しさん
09/03/08 02:04:51
nullがあるって変な表現だよね。

472:デフォルトの名無しさん
09/03/08 15:24:28
>>466
kwsk

2008 StdあればF#の拡張機能は組み込めるってこと?
あと、VS2008 の Shell 版なら本体買う必要なすってことなのかな?

473:472
09/03/08 15:31:46
ごめん、検索したら一杯情報出てきた。
大体あってた。

いげ太のブログ: Microsoft Visual Studio 2008 Shell (integrated mode) で F# 無償開発環境
URLリンク(igeta.cocolog-nifty.com)

> Microsoft Visual Studio 2008 Shell (integrated mode) を導入すれば、
> 無償の F# 開発環境が手に入る。噛み砕いて言えば、C# も VB.NET も C++/CLI も、
> 何の言語もバンドルされていない Visual Studio 2008 が、タダで手に入るってことだ。

> そして、VSShell がインストールされた状態で、F# をインストールすればよい。
> そうすれば VSShell に F# が組み込まれるのだ。

Visual Studio で F#の開発を行う - ピコピコの日記
URLリンク(d.hatena.ne.jp)

> 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:デフォルトの名無しさん
09/03/09 22:36:42
>>468 はこれか。
URLリンク(d.hatena.ne.jp)

いろいろ挑発的なことが書いてあるな

475:デフォルトの名無しさん
09/03/22 17:40:50
下がりすぎだろ

476:デフォルトの名無しさん
09/03/24 16:39:37
FParsecの話なんかやってくれないかなあ

477:デフォルトの名無しさん
09/03/24 20:11:44
こやつめw

478:デフォルトの名無しさん
09/04/15 07:26:41
Lang.NET開催中でつよ。(´・ω・`)

URLリンク(www.langnetsymposium.com)

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

Common Compiler Infrastructure - Metadata
URLリンク(ccimetadata.codeplex.com)

Common Compiler Infrastructure: Code and ASTcomponents
URLリンク(cciast.codeplex.com)

Common Compiler Infrastructure: Sample applications
URLリンク(ccisamples.codeplex.com)

480:デフォルトの名無しさん
09/04/15 19:35:17
Reactive Framework解禁でつね。(´・ω・`)

Democratizing The Cloud Using the LiveLabs Reactive Framework
URLリンク(en.oreilly.com)

481:デフォルトの名無しさん
09/04/15 20:48:26
>479
なにこれ?
やさしい人(かしこい人)おしえてくれろ。

482:デフォルトの名無しさん
09/04/16 06:12:26
>>481
MS Researchで昔から使われてる、.NETでのコンパイラ実装のための共通基盤です。
少なくとも2002年には存在してます。
URLリンク(www.inf.ethz.ch)

今ごろソース公開をはじめたということは、「Compiler as a Service」に向けての一歩ということじゃろか(´・ω・`)?

483:デフォルトの名無しさん
09/04/16 06:19:37
んで、ccisamplesを見てのとおり、Small BasicがCCI上で書かれてるみたいね。

484:デフォルトの名無しさん
09/04/16 18:01:22
へー。面白いね。
jay for C#とかと違って共通的なライブラリにするってわけだよね?


485:デフォルトの名無しさん
09/04/16 19:03:16
FxCopのカスタムルール書いてアセンブリを分析してた人には、部分的にお馴染みかも。
URLリンク(japan.internet.com)

486:デフォルトの名無しさん
09/04/16 19:37:36
にわかに盛り上がってると思ったら、F#の話題じゃなく、ドトネト全般の話題だったか。

487:sage
09/04/18 00:39:14
M言語の話題はどうよ? > Lang.NET 2009

488:デフォルトの名無しさん
09/04/18 07:04:45
ビデオがもううpされてますがな。(´・ω・`)
URLリンク(www.langnetsymposium.com)

489:デフォルトの名無しさん
09/04/18 17:42:21
EnumerableとObservableが双対になるということは、Reactive LINQは
comonadicなアプローチになるということじゃろか(´・ω・`)?

comonadとFRPの関係に言及してる人なんて、世界で数えるほどしか見つかりませんが・・・。

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

ええと、質問です。
F#がVS2010に正式採用されるそうですが、そうなったらF#入門書がそれなりに出ると思いますでしょうか?
さらには関数型言語のシェア(?)が今よりもっと広がると思いますでしょうか?
(つまり、他の関数型言語の入門書も増えますか?w)←実はこっちが私の願望

495:デフォルトの名無しさん
09/04/19 21:01:09
あ、他の関数型言語の開発も活発化するというのも私の願望にあったりします^^;

496:デフォルトの名無しさん
09/04/19 21:22:13
おれにもF#には見えないな

497:デフォルトの名無しさん
09/04/19 22:10:31
>> 490
別擦れたてろ。

498:デフォルトの名無しさん
09/04/19 22:55:05
別スレ立てるまでもないだろ。
スレリンク(tech板)

499:デフォルトの名無しさん
09/04/19 23:09:11
>>494
私も期待してます。
「F# for Scientists」の様な面白い本が
日本でも生まれるといいな。

500:デフォルトの名無しさん
09/04/19 23:55:19
> 「F# for Scientists」の様な面白い本
どんな内容なの?

501:10
09/04/20 12:54:44
>>500
「Expert F#」と重なる部分も一部あるけど、
ライブラリの使い方や .NET 系としての使い方というよりも
関数型言語としての使い方の解説が多い。
たとえば、memorize を関数型で実現するテクニックはなるほどと思った。

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

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

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

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

それでも、「Foundations of F#」の後に読むには
なかなかいい本になってる。

502:デフォルトの名無しさん
09/04/20 12:56:13
すいません、名前の 10 は無関係です。

前に同じ板の 「課題」 にレスしてたので・・・

503:デフォルトの名無しさん
09/04/20 15:46:41
せっかく>>10を参照したついでに、おまいら的にL#とかってアリなの?
URLリンク(www.lsharp.org)

504:デフォルトの名無しさん
09/04/20 19:54:41
またLispもどきかよ、くらいの印象しかない

505:デフォルトの名無しさん
09/04/20 20:14:01
Lisp の構文で .NET ライブラリが扱える
という以上の何ができるのか、紹介されたページからは分からん。

506:500
09/04/20 21:18:09
> 501
詳細どうもです。DirectX にまで触れてるんですね。
2 冊目以降に読む本、みたいなイメージでしょうか。

国内では入門本すらまだの段階ですし
コイツと同じような内容のものとなると
…さていつ出るやらですなあ。

507:デフォルトの名無しさん
09/04/20 23:41:52
lsharpでマクロとか使えるなら考えてみてもいい

508:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/04/21 22:29:12
>>509
ありがと。

grep してみたが、まだ幸せにはなれない。
ちょっと解析してみます。

511:デフォルトの名無しさん
09/04/22 20:14:28
海外では徐々に F# 関連の本が出始めてますね。
これなんか面白そうです。

Real World Functional Programming: With Examples in F# and C#
URLリンク(www.amazon.co.jp)

著者のブログ
URLリンク(tomasp.net)

7月発売なんで、まだまだ先だけど

512:デフォルトの名無しさん
09/04/23 00:12:51
>>511
早読みバージョン読んでるけど、関数型初めての自分には色々関数型での開発の利点とかを細かく説明してくれてるのでよいわぁ

513:デフォルトの名無しさん
09/04/25 13:23:19
こっちの本はリファレンス的に利用できそう

The Definitive Guide to F#
URLリンク(www.apress.com)

514:デフォルトの名無しさん
09/04/26 12:24:48
501 ですが、すいません、
アクティブパターンは扱ってました。

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

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

他に、こんな事に役立つよとかいう例はないですかね。
「いげ太のブログ」をみても、使い所が想像できなくて。
URLリンク(igeta.cocolog-nifty.com)

515:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/04/27 07:40:31
>>515
ヒント:

2、3行目をコメントアウトして1行目の multiply 関数の型をみてみる
次に3行目だけをコメントアウトして multiply 関数の型をみてみる
最後に全てのコメントを外し、2行目と3行目を入れ替えて multiply 関数の型をみてみる

517:デフォルトの名無しさん
09/04/27 11:13:43
>>516
2,3行目を逆にすると後の行がエラーになるのはわかります。
F#の型推論の場合、2行目で型が決定されてしまった時点でほかのものはそれに従わないといけないと言うこと?
これがC#のgenericsだったら(まぁそもそも*とかで書けませんが)2行目も3行目も各々の型に展開されてコンパイルされると思うんですが。
あぁかいてておもったがa'とかつかえばよいということ?

518:デフォルトの名無しさん
09/04/27 12:05:27
ジェネリックと同じ問題があって演算子があると ’a のままで使えない。
もともとのOCamlでは演算子も別だしね。 *. とか。

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

521:516
09/04/28 08:42:13
なる。
演算子の問題あるから、例に書いたのはそのまま通らないとして、
inlineをつけないと最初の奴を書いた時点でそのコンパイルスコープ?でコンパイルされる時の型が一意に決まってしまうため後の行のものはエラーになる。
inline付ければ各々に対して展開されるため大丈夫。
a'とかつかえば、どの型でも通るようになる。
ということでおけー?

522:デフォルトの名無しさん
09/04/28 09:37:15
これはキモい。


523:デフォルトの名無しさん
09/04/29 00:39:53
わからんならかかんでヨロし

524:デフォルトの名無しさん
09/04/29 00:52:59
>>520面白いな
static head-type type variableっていうのか ^ω^

525:デフォルトの名無しさん
09/04/29 15:05:28
おもしれー、これってF#固有?OCamlにもあるの?

526:デフォルトの名無しさん
09/04/29 16:06:49
ocamkでの通ったな

527:デフォルトの名無しさん
09/04/30 09:08:06
F#のリソース管理ってどうしてますか?

528:デフォルトの名無しさん
09/04/30 18:57:08
>>525 G'Camlだったらこんなことが出来るっぽいね
let plus = generic (+) | (+.)
F#版もstaticなメンバ関数が定義されていなければならないのは同じだから
これと同じ機能っぽい気がする

529:527
09/04/30 20:30:00
自己解決しました
useがusingと似たような機能を持っているようです

530:デフォルトの名無しさん
09/05/09 20:29:06
今月ベータ1が公開される予定だってさ。

URLリンク(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:デフォルトの名無しさん
09/05/09 20:43:31
むーん。今作ってるシステムの一部F#で実装しようと思ってたんだがどうすべかな・・・

532:デフォルトの名無しさん
09/05/12 00:32:43
>>531
OOPを駆使しなければなんとかなるんじゃね
クラスまわりは構文かわりそう…

533:デフォルトの名無しさん
09/05/12 00:40:39
>>531
まあ、一部ならいいんじゃね?
言語混在できるのが.NET Frameworkの強みだし。

534:531
09/05/12 00:46:09
>532
構文の変更とかはいいんだけど、作り込んでったあとにあるときだけ挙動がおかしいとかわけわからんバグが出るのが怖いです・・・
>533
ごもっともだす。どうせC#と混在になるのは目に見えてるからなぁ

535:デフォルトの名無しさん
09/05/12 07:39:39
ベータ1が今月内に出るんなら、
何が修正されたのか、機能はどうか、
情報が出てきても良い頃なんだが・・・
まだどこにも無いな

536:デフォルトの名無しさん
09/05/26 22:36:44
VS2010ベータのF#は.NET4.0しか対応してないみたいだ

537:デフォルトの名無しさん
09/05/27 00:47:37
PowerPack もなしですなー

538:デフォルトの名無しさん
09/05/27 21:41:42
May 2009 CTPだと.NET2.0やMonoもOKみたい

539:デフォルトの名無しさん
09/05/28 20:04:43
むぅ
fold_left -> fold
fold_right -> foldBack
ここに来てスタイル変えるか…

OCamlの小文字アンダースコア区切りはすっきりして好きだったんだがなぁ


540:デフォルトの名無しさん
09/05/28 21:40:53
だよなあ
まあ アンダースコア区切り→キャメル はわからんでもない
しかし right を back はないわー

fold_right を foldBack と呼ぶような言語は聞いたことないんだが
どこ由来なのかねえ?

541:デフォルトの名無しさん
09/05/29 01:40:44
変えるなら.NETと同じパスカルケースがよかったな…

542:デフォルトの名無しさん
09/05/29 06:41:50
>>539
マジ?そりゃないわ。
畳み込みって、右からとか左からっていうのが一般的な用語
だと思う。

543:デフォルトの名無しさん
09/05/29 09:13:33
+のオーバーロードとパイプ演算子|>のさわやかな風を残しつつF#終了
あれ多相ヴァリアントは?

さてOCamlに戻るか

544:デフォルトの名無しさん
09/05/29 12:15:24
fold イイ! foldBack ダメ! みたいに覚えてもらいたいんだろうけど、、、


545:デフォルトの名無しさん
09/05/29 16:01:45
できれば「.NET Frameworkが使えるOCaml」として作ってほしいなぁ
そういうリクエストしてみるかな
どうせβ2まであと1年あるし

546:デフォルトの名無しさん
09/05/29 20:20:20
VisualOcaml作ってくれればいいよ

547:デフォルトの名無しさん
09/05/29 23:51:41
>>545
実はあるんだが.NET1.1向け
Haskellもそうだな

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


OCamlはライブラリ不足な上にLinux以外のOSで動かないライブラリもいくつかあるし(win以外も含め)
不満は色々あるが今更OCamlには戻れん…

548:デフォルトの名無しさん
09/05/30 01:03:20
>>541
キャメル→関数
パスカル→メソッド
てことではないかと

549:デフォルトの名無しさん
09/05/31 11:04:57
>>540
いいじゃん。
そもそも左から右が正で右から左が逆っていう考え方はヨーロッパ的で日本とは逆なんだから、
右とか左とかいうのが消えたのは喜ばしい。データには右左関係ないからな。

550:デフォルトの名無しさん
09/06/01 13:42:23
データには正逆関係もないと思う。
古くからある抽象概念の名前を、突然、別の抽象的な言葉に置き換えるのなら、
もっと強い根拠がほしいと思う。もしあったら教えてください。


551:デフォルトの名無しさん
09/06/01 21:58:52
F#初心者だが、配列だろうがリストだろうがとりあえずデータの前後はあるんでは?
初心者からするとそれほど違和感ない。

552:デフォルトの名無しさん
09/06/01 22:00:46
OCamlとF#ってどのぐらい違うのよ。
.NET対応になってるのは別としてOCamlにあったナイスな機能がF#ではなくなってるとかあったら教えてたもれ

553:デフォルトの名無しさん
09/06/01 22:32:37
>>552
OCamlのみ
 多相ヴァリアント、ファンクタ、注釈ありで型がつく箇所では省略しても必ず型推論できる性質
 Camlp4/5、ビルド関係のツール(F#はしょぼい)

オブジェクト指向部分は根本的に違う(nominal/structural)

554:デフォルトの名無しさん
09/06/02 00:00:58
・・・
そのへんがあるとどんなにナイスか3行で頼む・・・

555:540
09/06/02 00:13:32
>>549
「fold_left or fold_right」より「fold or foldBack」の方が、
なんとなーく、ふつうは fold 使えよ的雰囲気をかもせるような
気はするんだよね

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

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

「これだから MS は!」なんて、関数型畑の人たちになじられやしないかという

556:デフォルトの名無しさん
09/06/02 09:20:52
いっそのことaggregateとaggregateBackにすればまだよかったのに
長ったらしいが

557:デフォルトの名無しさん
09/06/06 21:48:20
>>380

どうせ次にはJ#のポジションになってるんでしょw

558:デフォルトの名無しさん
09/06/06 22:33:26
J# は言語やIDEの良し悪しの問題じゃなくて、
SUNともめたせいだからなぁ。

その点、F# はMSリサーチ製なんで大丈夫。

559:デフォルトの名無しさん
09/06/06 22:40:45
Cωとかあったねー

560:デフォルトの名無しさん
09/06/06 23:00:59
Cωの機能は C# に引き継がれてるから問題ない

561:557
09/06/07 00:03:29
F# と J# を比較するのってアホ丸出しだぜ?

562:デフォルトの名無しさん
09/06/07 00:06:54
>>561
自分で自分の事をアホ呼ばわりしてるようにしか見えんのだが

563:デフォルトの名無しさん
09/06/07 17:05:15
              ∧∧
             / 共\
     ∧∧    (  `ハ´)   ∧∧
    /留学\  ( ~__))__~)  /留学\ カタカタ
     (`ハ´ ) カタカタ   |  .(`ハ´ )
   _| ̄ ̄||_)  |    .j._| ̄ ̄||_)
 /旦|―||// /|   ../旦|―||// /|
 | ̄ ̄ ̄ ̄ ̄ ̄| |   | ̄ ̄ ̄ ̄ ̄ ̄| |

中国の検閲システム金盾は2ch.netへのアクセスを遮断している
URLリンク(www.greatfirewallofchina.org)
にもかかわらず…

2ちゃんねるのアクセス状況(08年3月時点)
URLリンク(alexa.com)
1. 日本 874/1000
2. 中国  57/1000  <<ネット規制のある国でアメリカの5倍以上?
3. 米国  10/1000
24. 韓国  1/1000
中国から金盾を介さないで2chにアクセスしている輩は何者か?

564:デフォルトの名無しさん
09/06/08 12:03:51
なんでJ#の話題になってんの?全然違うだろ。

565:デフォルトの名無しさん
09/06/08 12:19:30
理由を書かず他人を罵倒する奴は大抵自分も判ってない。

566:デフォルトの名無しさん
09/06/08 14:39:22
そりゃ疑問文だしなw

567:デフォルトの名無しさん
09/06/08 21:51:58
まあなんだ、F#について語ろうよ

Custom Numeric Literalがどうしてもできんのだが
アレどうやったら定義できるの?わかる人いる?

568:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/12 19:59:51
追記
hoge.fsがhoge.fsx
ロード先ファイルが.fsx/.fs

等の組み合わせもいろいろためしたけど同じエラーが出る

571:デフォルトの名無しさん
09/06/14 15:54:58
>>567 >>568

> only the suffixes in the set "INZQRG" are supported
URLリンク(cs.hubfs.net)

もうね、そうならそうと Release Note に書いといてくれと

572:デフォルトの名無しさん
09/06/14 16:53:38
>>571
おぉ、できた。

苦労してできた後で思ったんだが、
これって何に使うんだろ・・・
いまいち分からん

573:デフォルトの名無しさん
09/06/14 17:16:00
正式リリース後の入門書にはたいてい紹介されるであろう
Custom Numeric Types による有理数表現を一部実装してみたが、
面倒な割には余り恩恵が得られなさそうだ。

574:デフォルトの名無しさん
09/06/14 17:44:29
>> 573
まあ関数なりで代用は利くけどね
無駄なカッコが省けるし、コード読みやすくなって割とイイと思う
面倒っちゃ面倒だけど取り立てて言うほどのものでもなくないかい?

575:デフォルトの名無しさん
09/06/14 18:38:39
面倒というのを取り立てて言うほどのものでもないけど、
そもそも Custom Numeric Types 自体が取り立てて言うほどのものでもないような

576:574
09/06/14 20:22:38
そういう細やかな機能のアレコレの積み重ねこそ
F# を F# たらしめている、と思うんだけれども

言語機能としてあるのにユーザ定義はできない
みたいなことがないように言語が設計されている
てのはよろこぶべきことなんじゃないかと

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

それはそうと、VS でのプロジェクト作成時に
オプション設定を無視して勝手に保存されるのは、
正式リリースではちゃんと直してくれるんだろうか。

578:sage
09/07/24 10:00:32
保守

579:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/08/23 05:43:22
プロジェクトのプロパティで、
Application -> Output type を
Windows Application に変えれば消えるんじゃない?

581:デフォルトの名無しさん
09/08/24 22:40:39
サクッと消えました。ありがとう!

582:デフォルトの名無しさん
09/08/29 17:29:32
F#の使いどころって並列処理なのは理解できるんだが、
効果的に使える分野がわからない。
大量データで大量に処理する用途って動画とかそっち方面?



583:デフォルトの名無しさん
09/08/29 18:29:47
普通のプログラムもF#で書けばよくね?
一度慣れるとC#とか万度くさくて。

584:名無しさん@そうだ選挙に行こう
09/08/30 13:22:35
ピンポイントで使おうみたいな意見をよくみるが
それはアプリの当該機能部分のみにF#使おうとしてるのか
そういう機能を持ったアプリ全体をF#で書こうとしてるのか。

どっちなんだろか。

585:名無しさん@そうだ選挙に行こう
09/08/30 13:57:22
>>582
別に高速計算のためだけに並列処理があるわけじゃないぞ。
GUIのインターフェース部分とメイン処理部分のスレッドを分けて、GUIの反応が悪くならないようにしたり、
ネットワークプログラムならそれぞれのセッション毎にスレッドを分けたり、
オブジェクトみたいな乗りで複数のプロセス同士をメッセージ通信でやりとりしたり(アクターモデル?プロセス代数?パイカルキュラス?)、
並列/並行プログラミングはプログラミングパラダイムだと考えた方がいい。

586:名無しさん@そうだ選挙に行こう
09/08/30 13:59:31
オブジェクト指向に取って代わって関数型言語による並行プログラミングが台頭してくる可能性がある

587:名無しさん@そうだ選挙に行こう
09/08/30 16:40:45
つうか関数型言語はなんでいちいち対話型インターフェースがついてくるんだ
あんなんいらないと思うんだけど

588:名無しさん@そうだ選挙に行こう
09/08/30 16:58:34
>>587
便利じゃん。
いちいちコンパイルしてテストなんてやらずに、対話的にいろいろ式を変化させて試せる。
軽量プログラミング言語とはそういうもんだ。

589:名無しさん@そうだ選挙に行こう
09/08/30 17:22:18
インタープリタでも動作し、コンパイルも可能というのは良い路線だと思う。
MSは次期オフィスにVBAの代わりにF#でも載せればいのに。。
VBAはあまりにも古臭い。

590:デフォルトの名無しさん
09/09/04 00:51:14
実はExcelとは親和性が高いかもね。
逆に手続き型のほうが相補的で良いのかも知れないが。

591:デフォルトの名無しさん
09/09/05 00:43:35
URLリンク(codezine.jp)
金融か。やっぱブラック=ショールズ公式適用できない問題に使われるのか。
金融に使われるためには、幾何ブラウン運動のシミュレーションできる
ライブラリがないと難しいかも。


592:デフォルトの名無しさん
09/09/05 01:17:54
現在、F#を使う理由が見当たらないのだが、
C#を使わずにF#を使う利点ってどんなものがある?
関数型言語は慣れると工数を削れると言われているけど、
現状のF#ではC#よりも手軽に・・・とはいかないよね?
VS2010でGUIにて開発ができるようになると変わるのかな・・・

593:デフォルトの名無しさん
09/09/05 01:23:02
>>592
一般的なプログラミング言語よりも数式の方を見慣れてる人向けだろうなぁ。

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

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

594:592
09/09/05 01:37:30
>>593
確かに関数型言語は理数系向きといわれてるね。

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

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

まあ、とりあえず暫くはぬるーく付き合いを続けてみます。

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

どっかのタイミングで、C#の成果とF#の成果が自然と融合して次の世代が生まれるかもしれないし、
F#に触れること自体は損にはならないと思うけど。

596:デフォルトの名無しさん
09/09/05 14:30:45
俺的にはF#(・∀・)イイ!!とおもってたんだが
本場のオカムラ-によると型推論がなってないとか多態バリアントねーじゃんとかだめ出しされてる・・・(´;ω;`)ウッ…

597:デフォルトの名無しさん
09/09/05 22:48:31
そういや、VF#ってOCamlの構文もサポートされるのはなんでだろう。
VF#インスコすると.mlファイルもなんかアイコンが変えられるし
OCamlの開発環境として使えるんだろうか。
OCamlの遺産を使いまわすつって需要があると思えんし。

598:デフォルトの名無しさん
09/09/06 09:16:21
Standard ML昔いじってから10年以上ブランクあるが、
ひさしぶりに関数型言語触ってみるかな。

599:デフォルトの名無しさん
09/09/09 03:50:28
金融関係の人に興味持ってもらえるもの作りたい。
URLリンク(derivative.fixstars.com)
これ読む限りだと、確率過程(いわゆる確率微分方程式の領域)を
めちゃくちゃいっぱい高速で作り出せれば興味もってもらえそう。
F#って乱数計算速い?もしくは、並列計算で速くできるもの?
乱数関係さっぱりわからんのよ。

600:デフォルトの名無しさん
09/09/09 03:51:57
訂正:乱数関係”も”

601:デフォルトの名無しさん
09/10/20 01:06:40
関数型は特定用途を除き流行らない感じがする。

602:デフォルトの名無しさん
09/10/20 01:49:00
んーずっとC#ばっかやってたけどF#は.NETつかえつつオブジェクト指向と関数型織り交ぜられて簡潔に書けるのでかなり使えそうな予感。

603:デフォルトの名無しさん
09/10/20 11:14:12
>>601
「特定用途」が何か一言も書けないような人は触ったことないだろうし
今後も使わないだろうから、無理して来なくていいよ。

604:デフォルトの名無しさん
09/11/08 19:18:31
でほるとが定数って頭おかしいだろ

605:デフォルトの名無しさん
09/11/08 21:54:59
定数?

606:デフォルトの名無しさん
09/11/08 23:09:11
定数じゃないよ、制約された値なんだよ

607:デフォルトの名無しさん
09/11/09 01:15:21
実際、C# とかで書いててもそんなに変数を mutable に使ってなかったりはするんだけど。
mutable に使うのはメンバー変数かループで反復に使うものくらい。
それ以外のローカル変数は immutable でもまず困らない。

まあでも、デフォルトが immutable なのはやっぱちょっと使いづらい。

608:デフォルトの名無しさん
09/11/09 07:39:13
デフォルトimmutableなほうが気にすることが減って楽だと思うけどねー

609:デフォルトの名無しさん
09/11/10 00:31:24
>>608
役に立たないとは言わないけど、そんなにメリット大きい?
その代償として OOP 的なメンバー変数使えなかったり、
ループ全部再帰で書かなきゃ行けなくなるってデメリット以上に。

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

変数は全部スレッドローカル、スレッド間で参照渡すの禁止、
スレッド間通信は Actor (MS 的に言うと Agent)ベースのメッセージ交換でやる
ってのだけで行けるはず。

610:デフォルトの名無しさん
09/11/10 00:50:52
>609
多分、関数型チックに書くのになれてくと自然とそういう風に書かなくなると思われ。

611:デフォルトの名無しさん
09/11/10 01:04:36
>>610
そっちに慣れた結果得られるものは何?

612:デフォルトの名無しさん
09/11/10 02:18:30
immutable強制だとさすがにやりすぎだと思うけど、
両方使い分けができてデフォルトがimmutableな分には別に問題ないと思う。

613:デフォルトの名無しさん
09/11/10 02:29:12
>>611
関数型でやりたくないならなぜF#を使うのか知りたい

614:デフォルトの名無しさん
09/11/10 06:33:06
>611
(簡潔に書けること+状態無し)による高生産性が主なメリットじゃね。

615:デフォルトの名無しさん
09/11/10 08:40:31
ところで

hoge.Connect()なんてるそっどがあって
例外が返ってこなくなるまでリトライし続けるのはどう書けばいいの?

616:デフォルトの名無しさん
09/11/10 10:00:35
>>614
それ、ほんと簡潔で生産性高い?

617:デフォルトの名無しさん
09/11/10 16:22:53
関数型プログラミングだからと言って、むやみやたらとループを再帰で書くことはないと思うけど
一般的にはそういうイメージなのかなあ。
自分はforeachとかfold/Aggregateのようなものをよく使う印象。

618:デフォルトの名無しさん
09/11/10 16:40:04
関数型言語の入門としては、手続き脳を関数脳にするためにという意図か、
必ずやるプロセスなんだよね。ループ的な処理を再帰で書かせるのは。

一旦慣れてしまうと、mapとかの高階関数を使うようになって、自分で
高階関数を書いたり直接再帰を書いたりはしなくなるわけだけど。

619:デフォルトの名無しさん
09/11/10 23:05:36
関数型な考え方は手続き型に応用できる場面が多い
まあ完全に関数型に移行するのは難しいけど、C#だって最近は関数型的になってるし

620:デフォルトの名無しさん
09/11/15 09:44:33
VS2010のF#とOct2009CTPのF#ってバージョン違いますか?
2010はドットネット4.0上でCTPは2.0上?

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

URLリンク(blogs.msdn.com)

622:デフォルトの名無しさん
09/11/28 23:29:24
F#の数値単位変換みたいな機能いいね。
あれ、通貨レートとかうまい具合利用できたりするの?

623:デフォルトの名無しさん
09/11/28 23:34:47
ああああああああいいいいいいい

624:デフォルトの名無しさん
09/11/28 23:36:19
市場価格と連動するないのw?(冗談)

625:デフォルトの名無しさん
09/11/28 23:43:06
さすがに今の市場価格とリアルに連動はネットワークとか
いろいろ絡んでくるからFX専門会社とかに任せないと無理として、
計算で便利ったら通貨だよね。

626:デフォルトの名無しさん
09/12/01 15:45:02
VSとは独立してコマンドラインで使いたかったのは俺だけ?

627:デフォルトの名無しさん
09/12/01 16:47:16
うん

628:デフォルトの名無しさん
09/12/01 18:39:58
path通せばコマンドラインでも使えるよ

629:デフォルトの名無しさん
09/12/02 11:11:35
Ocamlからそのまんまなんだろうけど、
コメントが (* *) なのは何とかして欲しい。


630:デフォルトの名無しさん
09/12/02 11:55:56
いつからかは知らないが(*) は演算子で解釈してくれてるよ

631:デフォルトの名無しさん
09/12/02 19:58:43
コメントなんかすぐ慣れるだろ

632:デフォルトの名無しさん
09/12/02 20:55:50
普段は困らないが、インタープリタのfsiで使ってるときだね。

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

何を入力しても反応がなくなってあせるぜ。

633:sage
09/12/05 12:26:13
>>629
> コメントが (* *) なのは何とかして欲しい。
たしかに慣れるまでキモいけど、入れ子に出来るのは最強だろ。
(*
 let hogehoge = ...
 (*
 let foobar = ...
 *)
 ...
*)

634:デフォルトの名無しさん
09/12/05 16:21:45
(*_*) (*ワ*) (*v*) (*o*)


635:デフォルトの名無しさん
09/12/08 23:21:58
F#って2010ExpessEditionで使えないんだろ?

C#ほど普及しないで廃れそうな気がするな
言語自体は面白そうだけど

636:デフォルトの名無しさん
09/12/08 23:48:00
そんなガチで普及させる気もともとないだろ。
.NET 使えばいろんな言語の相互運用できるよっていうポーズと、
リサーチの連中が作ったやつがなんか話題呼んでるみたいだし正式搭載するか
って程度のものかと。


637:デフォルトの名無しさん
09/12/08 23:52:17
クラウドクラウド言ってるし関数型の方が基幹システムなんか作るなら
良さそうな感じするけどな

638:デフォルトの名無しさん
09/12/08 23:58:15
関数型言語はクラウドと相性よさそうだもんな。

普通の企業はGoogleとかMSの検索エンジンを作りたいわけでもないので、
目に見えてメリットがあるような要素がないと飛びつかないだろうね

639:デフォルトの名無しさん
09/12/09 05:49:53
C#との相互運用の方法を分かりやすくマニュアルにすれば、
使う人は使うようになると思うな。
C#からF#を呼び出す使い方が重要になる。

640:デフォルトの名無しさん
09/12/09 07:07:19
これからメイン開発言語を徐々にF#に移行していく予定。

641:デフォルトの名無しさん
09/12/09 08:44:55
>>635
VS SDKでの対応は続くでしょ?

642:デフォルトの名無しさん
09/12/09 09:12:15
.NET の思想からすると、メインに C#、部分的に F# 使うとかがいい気がするよなぁ。
>>639 の言うとおり、C# からの呼び出し方をもっとアピールした方が。

643:デフォルトの名無しさん
09/12/09 11:20:21
F#のスケールの扱いはどうよ?
それ次第では、C#の一部をF#におきかえられるんだけど。

644:デフォルトの名無しさん
09/12/09 11:32:28
ここで言うスケールって何?

645:デフォルトの名無しさん
09/12/09 11:35:39
F#ってOCamlのライブラリは使えるの?

646:デフォルトの名無しさん
09/12/09 11:48:51
--mlcompatibilityを付けて、
互換ライブラリ(FSharp.PowerPack.dll)をロードすれば使える。

647:デフォルトの名無しさん
09/12/09 11:53:54
>>646
exeを配布する場合はそのdllも添付しないといけないの?

648:デフォルトの名無しさん
09/12/09 11:56:51
F#の追加ランタイムが.NETとは別に必要なので、
それと一緒に配布されている。

649:デフォルトの名無しさん
09/12/09 12:02:46
>>644
マルチンコアでのスケール

650:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/12/09 12:43:08
マルチコアもいいけどさErlangのようにマルチマシンで動くようにしてくれよ
Axumがどのくらい実用的に動くか分からないし

652:デフォルトの名無しさん
09/12/09 18:49:31
そのむかしJ#というのがありまして…

653:デフォルトの名無しさん
09/12/09 19:17:44
何その黒歴史?

654:デフォルトの名無しさん
09/12/09 19:20:09
とりあえず日本語テキストどっかから出ないとやる気起きないよう

655:デフォルトの名無しさん
09/12/09 19:21:56
>>654
OCamlの日本語テキスト読んどけば?

656:デフォルトの名無しさん
09/12/09 19:49:49
>>651
COM+

657:デフォルトの名無しさん
09/12/10 00:12:00
button.Click.Add( fun args -> MessageBox.Show("Hello World") )
ボタンにイベントを追加しようとしているのですが、
戻り値がDialogResultでUnitではないと怒られます。
戻り値はいらないのですがどのように書けばいいでしょうか。

658:デフォルトの名無しさん
09/12/10 03:20:49
>>657
MessageBox.Show("Hello World") |> ignore

659:デフォルトの名無しさん
09/12/10 09:51:26
>>658
それスマートですね。ありがとう。
こんなことをやってました・・
button.Click.Add( fun args -> let dm = MessageBox.Show("Hello World") in () ) 


660:デフォルトの名無しさん
10/01/04 00:55:00
あけましてあげ


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch