2

この関数で何が起こっているのか正確にはわかりません。本来の目的は、文字と文字列の 2 つのパラメーターを受け取り、その文字で区切られた文字列のリストを出力することです。

例えば、

break ',' "abc,def,ghi"

["abc","def","ghi"] を出力する必要があります

コードが与えられ、「?」に入力することになっています。

break ? [] = ?
break n xs = brk n xs ?
 where
 brk n xs acc
  | xs == [] = ?
  | n == ? xs = ? ++ break n (? xs)
  | ? = brk n (? xs) (acc ++ ?)

これにアプローチする方法や、acc がこの問題にどのように役立つかはわかりません。私が持っている唯一の考えは、最初の行は

break _ [] = []

誰かがこの問題を始めるのを手伝ってくれるなら、それは素晴らしいことです! ありがとう!

4

1 に答える 1

6

accは「accumulator」の略語です。これを使用して、再帰的に結果を蓄積します。breakとの型を見て、brkいくつかの手がかりを見つけてください。

break :: (Eq a) => a -> [a] -> [[a]]
brk   :: (Eq a) => a -> [a] -> [[a]] -> [[a]]

またはより具体的に:

break :: Char -> String -> [String]
brk   :: Char -> String -> [String] -> [String]

実装方法を理解するのに役立ついくつかの質問を次に示しますbrk

  • 最初の結果セットはどうあるべきですか?

  • 空のリストを分割すると、何が得られますか?

  • 文字列の先頭に分割文字が表示された場合、どうすればよいですか?

  • それ以外の場合はどうすればよいですか?

于 2012-09-18T05:10:53.247 に答える