在一些成员的大力帮助下,他们正在做一些家庭作业,但一位培训生只是向我展示了这一点。它使我的大脑感到困惑,其格式以及它的工作方式到底如何?我试图对其进行调整以了解它,但我不明白。
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
。函数应用程序是从左到右进行评估的,因此括号就在那里,以确保一切以正确的顺序进行。希望这可以减少语法的混乱。我不认为
munch
或runs
是标准函数,因此我只能猜测它们的作用。关于haskell - 有人可以解释这个Haskell吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5161595/