在一些成员的大力帮助下,他们正在做一些家庭作业,但一位培训生只是向我展示了这一点。它使我的大脑感到困惑,其格式以及它的工作方式到底如何?我试图对其进行调整以了解它,但我不明白。

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

最佳答案

一些伪代码来解释当调用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是标准函数,因此我只能猜测它们的作用。

关于haskell - 有人可以解释这个Haskell吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5161595/

10-15 00:27
查看更多