haskell-ja > Archives > 2011/09/09

2011/09/09 06:36:31 UTCkazu
#
質問1:String の末尾のスペースを落とす方法はありますか?
#
たとえば "foo bar baz " の末尾のスペースだけ落としたいんです。
#
reverse . dropWhile isSpace . reverse は、あんまりだと思っています。
#
質問2:重複した最大の文字列を探す問題を考えます。たとえば、"banana" だと "ana"。
#
定石では tails を使った後、ソートします。
#
sort . tails $ "banana"
["","a","ana","anana","banana","na","nana"]
2011/09/09 06:44:31 UTCkazu
#
これを x だとして、zip x (tail x) を y だとします。
#
[("","a"),("a","ana"),("ana","anana"),("anana","banana"),("banana","na"),("na","nana")]
#
filter (uncurry isPrefixOf) y で重複したものだけを取り出します。
#
[("","a"),("a","ana"),("ana","anana"),("na","nana")]
#
map fst すると
#
["","a","ana","na"]
#
この中から、最大長の文字列を探す場合、何を使うのがいいですか?
#
maximumBy (compare `on` length) しか思いつかなくてゲッソリしています。
#
教える相手は初心者なので、もうちょっと簡単にしたいんですが。。。
2011/09/09 07:01:04 UTCkazu
#
maximumBy には空リストを与えるとエラーになるようですし。
2011/09/09 07:23:28 UTCkazu
#
問題1:
#
正規表現 /^(.*)\w*$/ も、バックトラックするのだし、reverse でもいいのかなぁ。
2011/09/09 07:50:39 UTCkazu
#
さっきの正規表現は間違いでした。
#
/\s*$/ ですね。