在一些成员的帮助下做了一些家庭作业,但是一位课程老师刚给我看了这个。它让我的大脑难以理解它的工作原理和格式。我试图调整它以了解它,但我没有得到它。
fun2 :: String -> [String]
fun2 [] = []
fun2 (x:xs) = [fun1 (x:xs)] ++ runs (drop (length (munch (x:xs))) (x:xs))
fun1是:
fun1 (x:xs) = group (x:xs)
有人可以在学习辅助工具中为我打破这个吗?工作需要将一个功能用于另一个功能。
再次这是家庭作业,我只是在寻求指导来理解Haskell,因为我无法理解它!
答案 0 :(得分:3)
一些伪代码用于解释调用fun2时发生的事情:
if the argument is [] (the empty list)
return []
else (the argument is a non-empty list x:xs)
fun1Result = fun1 (x:xs)
fun1List = [fun1result] -- a list of one element
munchResult = munch (x:xs)
lengthResult = length munchResult
dropResult = drop lengthResult (x:xs)
runsResult = runs dropResult
return fun1List ++ runsResult -- concatenate the two lists
在Haskell中,只需在函数和参数之间放置一个空格即可应用函数。因此f x
使用值f
调用函数x
。函数应用程序从左到右进行评估,因此括号就是确保一切按正确的顺序进行。
希望这会使语法不那么混乱。我不认为munch
或runs
是标准函数,因此我只能猜测它们的作用。