【问题标题】:Can someone explain this Haskell?有人可以解释一下这个 Haskell 吗?
【发布时间】:2011-03-01 23:16:18
【问题描述】:

在一些成员的大力帮助下,我一直在做一些家庭作业,但一位课程伙伴刚刚向我展示了这一点。它使我的大脑感到困惑,格式以及它的工作原理是什么?我试图调整它以了解它,但我不明白。

fun2 :: String -> [String]
fun2 [] = []
fun2 (x:xs) = [fun1 (x:xs)] ++ runs (drop (length (munch (x:xs))) (x:xs))

有趣的是:

fun1 (x:xs) = group (x:xs)

有人可以在学习的帮助下为我分解吗?工作需要将一种功能用于另一种功能。

这又是作业,我只是寻求指导以了解 Haskell,因为我无法理解它!

【问题讨论】:

  • 请写出导入了哪些模块。否则,不可能知道 munch 指的是哪个函数。 runs 是如何定义的?
  • 该代码的作者风格不同寻常; (x:xs) 上的模式匹配似乎没有任何用处。 Fun1 我想实际上并没有大写,因为那将是一个无效的函数名。

标签: haskell


【解决方案1】:

一些伪代码来解释调用 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 用值x 调用函数f。函数应用程序是从左到右评估的,所以括号只是为了确保一切都以正确的顺序发生。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-02
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多