[過去ログ] 【.NET】F#について語れ2【OCAML】 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
98: 2011/06/08(水)10:27 AAS
>>97
上級者は何を使うんだ?
99
(1): 2011/06/08(水)10:47 AAS
文字列のlistがあって、その文字列を表示できる矩形を重ならないように上から並べたrectと文字列のタプルのリスト返せっつったら、foldで次のトップと結果のlistを状態にするような感じでよろし?
こういうのにfold使うのなんか微妙に違和感あるんだけれどこんなもんかね@関数型初心者。
100: 2011/06/08(水)11:11 AAS
>>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
101: 2011/06/08(水)21:30 AAS
F#って末尾最適化はやってくれている?
102: 2011/06/08(水)22:13 AAS
コンパイル時に .tail がつく
103: 2011/06/08(水)22:28 AAS
F#で文字の連結ってどうするんですか?
+でできるのはわかるんですが、これだと遅いですよね?
104: 2011/06/08(水)22:50 AAS
いっておくがStringBufferみたいなものはないからな
105: 2011/06/08(水)22:51 AAS
StringBuilder使えって言っておけばいいのかな
106
(7): 2011/06/08(水)23:17 AAS
末尾最適化になってるはずなんだがstackOverFlowになるってことはなってないんだろうなぁ・・・何か確認する方法あったっけ。
そもそも要素一つずつ減らしてるから無限ループになるはずないのに4千件ぐらいでStackOverFlowになるってなんか変だ。
Console.WriteLineで出力しても途中まで減ってってるのに突然何も出さなくなって5秒ぐらいしてからStackOverFlowが出てもうわけわかめ(´;ω;`)ブワッ
107: 2011/06/09(木)05:16 AAS
>>106
コードkwsk
108: 2011/06/09(木)05:19 AAS
.tailプリフィックス付いてても状況によっては無視されるって奴かな?
109: 106 2011/06/09(木)08:39 AAS
あれーインタラクティブに流し込んだらもっとたくさん流し込んでもさっくり動くよ…
そもそもデバッガーだと末尾最適化しないとかあったっけ?いやそんなことないよね…

問題だけどインタラクティブでさっくり動いたコードとりあえずまるっと載せてみる

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)
省14
110: 106 2011/06/09(木)08:40 AAS
//続き
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に合う。
省17
111: 106 2011/06/09(木)08:43 AAS
インデントが(;´Д`)

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
省12
112: 106 2011/06/09(木)08:44 AAS
スペースを入れてもダメか。俺\(^o^)/オワタ
113
(3): 2011/06/09(木)09:16 AAS
htmlレンダリングの問題だけで、スレに書き込まれてるソース的には空白やタブ残ってたと思った。

リンク貼る形式なら、gistや>11の使うといいと思う
114
(1): 2011/06/09(木)09:46 AAS
>>113
106ではないが、インデントを推測して貼ってみた。F#の構文がわからないので間違ってるかも
http://ideone.com/JW8dl
115
(1): 2011/06/09(木)10:06 AAS
>>106
よくわからんがfindFitRangeは再帰しなくても高階関数使った方がシンプル
let inRange v (from, t) = from<=v&&v<=t
let isFit v ranges = ranges.exists(isRange v)
let findFitRange ranges inter =
if (isFit inter ranges) then Some ranges
else None
116
(1): 2011/06/09(木)10:51 AAS
>>113の通りで、データとしては空白残ってるよ
俺はnavi2ch使ってるので普通にインデントが見れる
http://ideone.com/eE0C0
117
(1): 106 2011/06/09(木)11:37 AAS
>113-116
オマイラあり\(^o^)/

>115
いや、リストをなめていって見つかったらそれと、それ以降のやつをタプルで返してるのでそのやり方だとミリ。
なんかうまい高階関数あるのかもしれんが。
1-
あと 885 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.165s*