2012-09-18 86 views
2

我很难开始这个,因为我不确定这个函数到底发生了什么。它应该做的是接受2个参数,一个字符和一个字符串,然后输出由该字符分隔的字符串列表。Haskell:调用其他函数+递归

例如,

break ',' "abc,def,ghi" 

应该输出[ “ABC”, “DEF”, “GHI”]

我给出的代码,我应该填写“? “s

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

我不知道如何解决这个问题或acc如何解决这个问题。我唯一的想法是,第一行应该是

break _ [] = [] 

如果有人可以帮我开始处理这个问题,那太棒了!谢谢!

+1

我认为这是家庭作业...仅供参考这种类型的尾递归在Haskell中并不像您想象的那么好,您通常可以通过守护递归逃脱。 –

回答

6

acc是“累加器”的缩写 - 您可以在递归时使用它来累加结果。看看类型的breakbrk一些线索:

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

或者更具体:

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

这里有一些问题,帮助你找出如何实现brk

  • 最初的一组结果应该是什么?

  • 当你拆分一个空列表时应该得到什么?

  • 当分割字符出现在字符串的开头时应该怎么做?

  • 你应该怎么做?