有人可以解释这个Haskell吗?

时间:2011-03-01 23:16:19

标签: haskell

在一些成员的帮助下做了一些家庭作业,但是一位课程老师刚给我看了这个。它让我的大脑难以理解它的工作原理和格式。我试图调整它以了解它,但我没有得到它。

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,因为我无法理解它!

1 个答案:

答案 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。函数应用程序从左到右进行评估,因此括号就是确保一切按正确的顺序进行。

希望这会使语法不那么混乱。我不认为munchruns是标准函数,因此我只能猜测它们的作用。