[過去ログ]
【.NET】F#について語れ2【OCAML】 (1002レス)
【.NET】F#について語れ2【OCAML】 http://mevius.5ch.net/test/read.cgi/tech/1304185609/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
93: デフォルトの名無しさん [] 2011/06/07(火) 12:29:28 F#のイディオム的なテクニックを教えてほしいな。 例えば、クロージャーとか簡単なもの。 使い始めたんだけど、上手く使えてるか自信がない。 F#ならではの書き方あったら教えてください。 http://mevius.5ch.net/test/read.cgi/tech/1304185609/93
94: デフォルトの名無しさん [sage] 2011/06/07(火) 18:32:10 >>93 LINQは使ったことありますか? http://mevius.5ch.net/test/read.cgi/tech/1304185609/94
95: デフォルトの名無しさん [sage] 2011/06/07(火) 20:10:49 >>94 C#では使ったことがあります。 http://mevius.5ch.net/test/read.cgi/tech/1304185609/95
96: デフォルトの名無しさん [sage] 2011/06/07(火) 23:39:58 >>93 関数型の場合何やるにも再帰。 とくに末尾再帰はしっかりみにつけるべき。 http://mevius.5ch.net/test/read.cgi/tech/1304185609/96
97: デフォルトの名無しさん [sage] 2011/06/08(水) 10:21:18 >>93 非関数型プログラマ: forやwhileループを使う 関数型入門者: 再起を使う 中級者: map, foldをなるべく使う これが割と参考になるかも。 http://mevius.5ch.net/test/read.cgi/tech/1304185609/97
98: デフォルトの名無しさん [sage] 2011/06/08(水) 10:27:21 >>97 上級者は何を使うんだ? http://mevius.5ch.net/test/read.cgi/tech/1304185609/98
99: デフォルトの名無しさん [sage] 2011/06/08(水) 10:47:37 文字列のlistがあって、その文字列を表示できる矩形を重ならないように上から並べたrectと文字列のタプルのリスト返せっつったら、foldで次のトップと結果のlistを状態にするような感じでよろし? こういうのにfold使うのなんか微妙に違和感あるんだけれどこんなもんかね@関数型初心者。 http://mevius.5ch.net/test/read.cgi/tech/1304185609/99
100: デフォルトの名無しさん [sage] 2011/06/08(水) 11:11:11 >>99 こんな感じ? let union rect1 rect2 = new Rect(rect1.x, rect1.y, max rect1.width rect2.width, rect1.height+rect2.height) in ss |> map (fun s -> getRectOf(s)) |> fold union empty_rect http://mevius.5ch.net/test/read.cgi/tech/1304185609/100
101: デフォルトの名無しさん [sage] 2011/06/08(水) 21:30:46 F#って末尾最適化はやってくれている? http://mevius.5ch.net/test/read.cgi/tech/1304185609/101
102: デフォルトの名無しさん [sage] 2011/06/08(水) 22:13:07 コンパイル時に .tail がつく http://mevius.5ch.net/test/read.cgi/tech/1304185609/102
103: デフォルトの名無しさん [sage] 2011/06/08(水) 22:28:05 F#で文字の連結ってどうするんですか? +でできるのはわかるんですが、これだと遅いですよね? http://mevius.5ch.net/test/read.cgi/tech/1304185609/103
104: デフォルトの名無しさん [sage] 2011/06/08(水) 22:50:12 いっておくがStringBufferみたいなものはないからな http://mevius.5ch.net/test/read.cgi/tech/1304185609/104
105: デフォルトの名無しさん [sage] 2011/06/08(水) 22:51:05 StringBuilder使えって言っておけばいいのかな http://mevius.5ch.net/test/read.cgi/tech/1304185609/105
106: デフォルトの名無しさん [sage] 2011/06/08(水) 23:17:37 末尾最適化になってるはずなんだがstackOverFlowになるってことはなってないんだろうなぁ・・・何か確認する方法あったっけ。 そもそも要素一つずつ減らしてるから無限ループになるはずないのに4千件ぐらいでStackOverFlowになるってなんか変だ。 Console.WriteLineで出力しても途中まで減ってってるのに突然何も出さなくなって5秒ぐらいしてからStackOverFlowが出てもうわけわかめ(´;ω;`)ブワッ http://mevius.5ch.net/test/read.cgi/tech/1304185609/106
107: デフォルトの名無しさん [sage] 2011/06/09(木) 05:16:59 >>106 コードkwsk http://mevius.5ch.net/test/read.cgi/tech/1304185609/107
108: デフォルトの名無しさん [sage] 2011/06/09(木) 05:19:42 .tailプリフィックス付いてても状況によっては無視されるって奴かな? http://mevius.5ch.net/test/read.cgi/tech/1304185609/108
109: 106 [sage] 2011/06/09(木) 08:39:36 あれーインタラクティブに流し込んだらもっとたくさん流し込んでもさっくり動くよ… そもそもデバッガーだと末尾最適化しないとかあったっけ?いやそんなことないよね… 問題だけどインタラクティブでさっくり動いたコードとりあえずまるっと載せてみる let inRange from t v=from<=v&&v<=t //rangeによってポイントをまとめる。 //現在のrange=from〜tに合うならptListに追加。 //合わないなら今までのptListを一組としてptListListに追加し、新しいポイントとしてptListに追加。 //合うrangeがなくなるか、iListが空になったら抜ける。 let rec toPtrListList (ptList,ptListList,((from,t)::rangeList)) (i::iList) indToInter indToVal= // Console.WriteLine("toPtrLL----{0}",System.Environment.TickCount) // Console.WriteLine ("toPtrLL iList={0},rangeL={1}",List.length iList,rangeList.Length) let inter=indToInter i let toPt()=inter,indToVal i //System.Drawing.PointF(float32<|trans.XInterToUI inter,toUIY series.[i]|>float32) //helper----- //合うrangeを探してそれ以降を返す。 let rec findFitRange rangeList inter= // Console.WriteLine("findFitR {0}",System.Environment.TickCount) match rangeList with |[]->None |(from,t)::tail-> if inRange from t inter then Some rangeList else findFitRange tail inter //iListが空ならその時点のを結果とする。有るなら続き。 http://mevius.5ch.net/test/read.cgi/tech/1304185609/109
110: 106 [sage] 2011/06/09(木) 08:40:17 //続き let contOrBreak (ptList,ptListList,rangeList) iList= // Console.WriteLine ("contOrBreak iList={0}",List.length iList) match iList with |[]->[],ptList::ptListList,rangeList |_->toPtrListList (ptList,ptListList,rangeList) iList indToInter indToVal // Console.WriteLine("toPtrLL---before helper {0}",System.Environment.TickCount) //-----helper if inRange from t inter then //現在のrangeに合う。 contOrBreak (toPt()::ptList,ptListList,((from,t)::rangeList)) iList else //rangeに合わない if t<inter then //現在のrangeよりinterが先。 match findFitRange rangeList inter with |Some (rangeList)-> //fitするものがあったのですすめる。 contOrBreak ([toPt()],ptList::ptListList,rangeList) iList //なかったので現在のものを結果とする。 |_->[0,0],ptList::ptListList,(from,t)::rangeList //inter<fromなので今のindを捨てる。 else // Console.WriteLine ("hogehoge iList={0}",iList.Length) contOrBreak (ptList,ptListList,((from,t)::rangeList)) iList let test= toPtrListList ([],[],[0,10000;10001,20000;20001,30000]) ([0..50000]@[0..100]) id (fun i->i+100000) http://mevius.5ch.net/test/read.cgi/tech/1304185609/110
111: 106 [sage] 2011/06/09(木) 08:43:47 インデントが(;´Д`) let inRange from t v=from<=v&&v<=t //rangeによってポイントをまとめる。 //現在のrange=from〜tに合うならptListに追加。 //合わないなら今までのptListを一組としてptListListに追加し、新しいポイントとしてptListに追加。 //合うrangeがなくなるか、iListが空になったら抜ける。 let rec toPtrListList (ptList,ptListList,((from,t)::rangeList)) (i::iList) indToInter indToVal= // Console.WriteLine("toPtrLL----{0}",System.Environment.TickCount) // Console.WriteLine ("toPtrLL iList={0},rangeL={1}",List.length iList,rangeList.Length) let inter=indToInter i let toPt()=inter,indToVal i //System.Drawing.PointF(float32<|trans.XInterToUI inter,toUIY series.[i]|>float32) //helper----- //合うrangeを探してそれ以降を返す。 let rec findFitRange rangeList inter= // Console.WriteLine("findFitR {0}",System.Environment.TickCount) match rangeList with |[]->None |(from,t)::tail-> if inRange from t inter then Some rangeList else findFitRange tail inter //iListが空ならその時点のを結果とする。有るなら続き。 http://mevius.5ch.net/test/read.cgi/tech/1304185609/111
112: 106 [sage] 2011/06/09(木) 08:44:27 スペースを入れてもダメか。俺\(^o^)/オワタ http://mevius.5ch.net/test/read.cgi/tech/1304185609/112
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 890 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.007s