1

分割機能の欠落に関する他のスレッドを見たことがありますが、学習目的でこれを行っており、自分自身を理解したいので、覗きたくありませんでした。だからここにあります:

split :: Char -> String -> [String]
split c xs | null f = []
           | otherwise = f : split c s'
  where (f,s) = break (== c) xs
        s' | null s = s
           | otherwise = tail s

正常に動作しているようですが (何か問題がある場合は教えてください)、文字列に含まれていない分割文字を使用すると、関数は元の文字列の単一要素を含むリストを返しますが、空のリスト。私はそれを行う方法を理解できません。

何か案は?。

4

1 に答える 1

1

元の関数の結果を変更して、ラッパー関数を簡単に作成できます。

split' x xs = go (split x xs)  where
   go [_] = []
   go ys = ys

分割関数を記述するには多くの方法があります。

split x xs = foldl' go [[]] xs where
   go (ys:yss) y | y == x = []:ys:yss
                 | otherwise = (y:ys):yss    

また

 import Data.List 

 split x xs = map tail $ groupBy (const (/=x)) (x:xs)
于 2012-04-11T08:27:14.657 に答える