- 関数型プログラミング言語Haskell Part27_©2ch.net
18 :デフォルトの名無しさん[sage]:2015/01/11(日) 10:28:31.59 ID:xBHWy4LP - Prelude> let f n = last . takeWhile ((>=) n . sum) . foldl (\ ls a -> ls ++ [last ls ++ [a]]) [[]]
Prelude> f 7 [2,1,3,2,3] [2,1,3] Prelude> f 6 [2,1,3,2,3] [2,1,3] Prelude> f 1 [2,1,3,2,3] []
| - 関数型プログラミング言語Haskell Part27_©2ch.net
19 :デフォルトの名無しさん[sage]:2015/01/11(日) 11:13:36.60 ID:xBHWy4LP - Prelude> class HaveSize a where size :: a -> Int
Prelude> instance HaveSize [a] where size = length Prelude> let f n = length . last . takeWhile ((>=) n . sum) . scanl (\ ls a -> [a] ++ ls) [] Prelude> let saturate n xs = take (f n $ map size xs) xs Prelude> saturate 7 ["aa", "b", "ccc", "dd", "eee"] ["aa","b","ccc"] Prelude> saturate 6 ["aa", "b", "ccc", "dd", "eee"] ["aa","b","ccc"] Prelude> saturate 1 ["aa", "b", "ccc", "dd", "eee"] []
| - 関数型プログラミング言語Haskell Part27_©2ch.net
24 :デフォルトの名無しさん[sage]:2015/01/11(日) 20:31:52.09 ID:xBHWy4LP - ベンチありがとう
sumは漸化で扱うべきだというところまで 考えが至らなかったのはまだまだ修行が足りないな
| - 関数型プログラミング言語Haskell Part27_©2ch.net
29 :デフォルトの名無しさん[]:2015/01/11(日) 23:09:31.16 ID:xBHWy4LP - これ
> 結果リストの各要素の大きさの合計も同時に得るに誰も挑戦しなかったのは、 > それによってコードが一気に複雑になるからですね。 自分で言われてるように、必要ないものを同時に考えたくないだけで省いた > それは後から sum . map size でも得られるので無くてもかまいません。 説明が丁寧なのはいいのだけど、HaveSizeクラスの部分とかも ちょっと問題が冗長だと感じました。
|
|