【问题标题】:problems with haskell code understandinghaskell 代码理解问题
【发布时间】:2012-03-17 00:34:05
【问题描述】:

我是一名学生,刚开始使用 Haskell 并遇到部分代码问题。我不明白这段代码是如何工作的。谁能解释一下我的工作原理?

check :: String -> Bool
check = check' [] where
    check' []       []       = True
    check' _        []       = False
    check' x       ('(':xs) = check' ('(':x) xs
    check' ('(':x) (')':xs) = check' x xs
    check' _        (')':xs) = False
    check' x       (_  :xs) = check' x xs

【问题讨论】:

  • 哪一部分你不明白?你知道这个函数应该做什么吗?你熟悉 Haskell 语法吗?
  • 我不明白这个程序如何检查括号平衡...

标签: haskell


【解决方案1】:

check' 函数的第一个参数用作堆栈来计算打开的括号。每次遇到左括号时,它都会将其附加到堆栈并继续输入行的其余部分:

check' x ('(':xs) = check' ('(':x) xs

然后,当它遇到一个右括号时,它会弹出一个左括号并继续:

check' ('(':x) (')':xs) = check' x xs

但是如果堆栈中有右括号并且没有左括号,则失败:

check' _ (')':xs) = False

另外,如果行结束,并且未闭合的括号仍然存在,则失败:

check' _ []       = False

默认情况下,堆栈是空的。其余的都是明显的边界情况。

【讨论】:

    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2019-06-03
    • 2013-01-28
    相关资源
    最近更新 更多