[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
760: 712 [sage] 2011/12/20(火) 12:36:53.70 AAS
7.2 はライブラリの方がまだ追いついていない場合が多い
base のバージョンとかコンパイル仕様の変更とか
761: 712 [sage] 2011/12/20(火) 12:40:57.01 AAS
>>755
755(1): 712 [sage] 2011/12/19(月) 18:51:02.49 AAS
>>740
そうですか

私も心が挫けそうで、もう諦め気味です
Windows 標準搭載のコマンドプロンプト以外のコンソールでもダメだったら諦めます
msys とかでもダメっぽいんで、もう諦めました
762: やんやん ◆yanyan72E. [sage] 2011/12/20(火) 12:56:27.76 AAS
統合失調症に定型性なんてねーよ。
陽性症状、陰性症状、人によって症状は様々。
精神医学の専門書の一つでも読んでからそういうこと言えよ。
大雑把にいえば、心の中の自分と他人の境界に穴が開く病気だ。
だから、自分が思っていることが人の声として幻聴で聞こえたりする。
763: デフォルトの名無しさん [sage] 2011/12/20(火) 13:35:49.93 AAS
5年から10年ぐらい前ぐらいに思考盗聴こえええ皆も気をつけろとか叫んでた人を結構みたけど
あれがそうだったのか・・・
764: デフォルトの名無しさん [] 2011/12/20(火) 13:50:48.26 AAS
Database.HDBC.MySQLのfromSqlでstringに変換するとasciiデータはputStrLnで表示出来るのですがunicodeは文字コードが表示されます。
まだunicodeに対応できていないのでしょうか?
765: デフォルトの名無しさん [] 2011/12/20(火) 15:03:12.99 AAS
unicodeも表示出来ました。
766: デフォルトの名無しさん [sage] 2011/12/20(火) 16:29:36.21 AAS
742がやってることはホームレスを無差別にいじめてる事と同じでしょ。
767
(6): デフォルトの名無しさん [] 2011/12/20(火) 21:54:07.97 AAS
listAは重複がないリストとする。
listBは空でなく、順序は不明だがlistAの要素の連続になっている。
listAの要素であるxを渡された時、それがlistBと比較して前方にあるか
後方にあるか、それともlistBに含まれるかを判定したい。
例で書くと
listA = ["A","B","C","D","E",...]
listB = ["C","D","B"]
xが"E"なら、listBに含まれるB,C,Dに対して「後方」ということになる。
このとき、haskellらしい考え方だとどういうアプローチになる?
俺の手続き脳だと
1. xがlistBにあるかどうかを判別
2. xとlistBそれぞれの要素のlistA内での位置を調べる
3. 調べた位置を比較して「前方」「後方」を判定する
と考えたんだけど、ザ・手続きっぽくてダサいよなぁ、と思って。
768: デフォルトの名無しさん [sage] 2011/12/20(火) 22:49:41.06 AAS
こんな感じ?
filter (flip all listB . (/=)) listA
769: デフォルトの名無しさん [sage] 2011/12/20(火) 22:52:12.32 AAS
ごめん問題読んでなかった。取り除くんじゃないのな。
770
(1): デフォルトの名無しさん [sage] 2011/12/20(火) 22:55:42.52 AAS
>>767
めっさ力技

data Pos = F | M | E deriving Show

getPos :: Eq a => [a] -> [a] -> a -> (Maybe Pos)
getPos listA listB = fmap f . (`lookup`listE) where
    listC = map (`elem` listB) listA
    listE = zip listA $ zip listC $ scanl1 (||) listC
    f (True,_)      = M
    f (False,False) = F
    f (False,True)  = E

listA = [0,1,2,3,4]
listB = [2,3,1]
x=0
main = do
 let g = getPos listA listB
 print $ g 0
 print $ g 1
 print $ g 2
 print $ g 3
 print $ g 4
771
(4): デフォルトの名無しさん [sage] 2011/12/20(火) 23:35:56.81 AAS
>>767
1. listAをlistA1 ++ [x] ++ listA2にわける
2. listA1とlistBのintersectionを取って判定

f listA listB x =
if y == 0 then 1 else if y == length listB then -1 else 0
 where y = length $ takeWhile (/= x) listA `intersect` listB
772
(1): デフォルトの名無しさん [sage] 2011/12/21(水) 01:20:13.13 AAS
>>767
f listA listB x = (elem x as, elem x listB) where as = takeWhile (not.flip elem listB) listA
773: デフォルトの名無しさん [sage] 2011/12/21(水) 08:25:55.14 AAS
>>771
(y == 0)のあとに(elem x listB)でもう一回場合分けが必要でない?
774: デフォルトの名無しさん [sage] 2011/12/21(水) 12:32:22.50 AAS
>>759
759(1): デフォルトの名無しさん [sage] 2011/12/20(火) 11:32:27.13 AAS
やっとこさ新版 Hasklell Platform2011.4.0.0 がリリースされてたよー
ghc 7.0.4 で 7.2 ぢゃないんですね。
元々4月の予定だったよな……
775
(1): デフォルトの名無しさん [sage] 2011/12/21(水) 12:43:01.28 AAS
>>767 の解法としていくつか提示された例は、
たとえば1ヶ月後とかに自分が読んでも、あるいは他人が読んでも、
どんな計算をして答えを求めているのか簡単に分かるもんなの?
776
(2): デフォルトの名無しさん [sage] 2011/12/21(水) 16:52:03.13 AAS
listBの要素はソートすればlistAの連続部分列になるってこと?
777: デフォルトの名無しさん [sage] 2011/12/21(水) 17:20:50.31 AAS
>>776 listAは整列だという仮定はない。「listAでの出現位置」に基づいてソートするなら話は別だが。
778
(6): デフォルトの名無しさん [sage] 2011/12/21(水) 19:40:34.62 AAS
>>767
data Where = Before | Here | After

whereIncluded :: (Eq a) => [a] -> [a] -> a -> Where
whereIncluded _ [] _ = After
whereIncluded (a:as) (b:bs) x
| x == b = Here
| x == a = if elem x bs then Here else Before
| otherwise = whereIncluded as bs x

[説明]
・listA と listB それぞれの head と x を比較する
・listB の head と x が同じなら、x は listB に含まれる
・そうではなく listA の head と x が同じ場合、
 x が listB に含まれていなければ、x は後方にある
・どちらの head とも異なっていれば、両者の tail に対して同計算を繰り返す
・計算を繰り返した結果 listB の tail が空なら、x は後方にある

提示された条件を全て完全に満たすものとして式を書いたので、
エラー処理は省いてある
779: 767 [sage] 2011/12/21(水) 21:02:56.56 AAS
>>770,771,772,778
まさかこんなに素早く返事があるとは思ってなくて
反応遅れました。すみません。
具体的なコード例までわざわざありがとうございます。
見事に誰一人としてelemIndexなんて使ってないですね……。
順序を調べる、という発想自体を捨てないと駄目だということが
よくわかりました。

>>775
個人的には770さんの例以外は見て何をしているかは
すぐ把握できました。

>>776
777さんが返してくれていますが、listAは整列とは限らないです。
listAの位置に基づいてlistBをソートすれば、listBは確かに連続
部分列になります。

というわけで、どうも皆さんありがとうございました。
780
(3): デフォルトの名無しさん [sage] 2011/12/22(木) 05:28:49.45 AAS
>>778
whereIncluded [1..6] [5] 4 = whereIncluded [2..6] [] 4 = After
781: デフォルトの名無しさん [sage] 2011/12/22(木) 07:22:14.40 AAS
>>780
あぁなるほど、そうか

ちょっと修正案を考えてみる
782: 778 [sage] 2011/12/22(木) 07:52:15.94 AAS
>>780 に指摘されて修正案を考えてる時に、
全然違うアイデアが思い浮かんだんだが、
これは今まで出てきたかな(特に >>771 と同類か)

listA から x の位置を探す
x の位置の直後から
783
(2): 778 [sage] 2011/12/22(木) 07:55:25.77 AAS
途中でレスってしまった

>>780 に指摘されて修正案を考えてる時に、
全然違うアイデアが思い浮かんだんだが、
これは今まで出てきたかな(特に >>771 と同類か)

listA から x の位置を探す
x の位置の直後から listB の要素数分の要素をリストとして取り出す listC
x が listB に無い場合、head listB が listC に有れば「前」
head listB が listC に無ければ「後ろ」
784
(1): 778 [sage] 2011/12/22(木) 08:55:12.79 AAS
>>783
訂正

> x の位置の直後から listB の要素数分の要素をリストとして取り出す listC

x の位置の直後から末端までをリストとして取り出す listC
1-
あと 194 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.014s