【发布时间】:2014-10-01 16:10:21
【问题描述】:
我正在尝试编写一个代码,在给定括号列表的情况下,我将检查订单是否有效。
为简单起见,定义了以下数据类型。
datatype par = LPAR | RPAR
type pList = par list
到目前为止我所拥有的是:
fun valid(nil:plist): bool = true
| valid([Lpar]) = false
| valid([Rpar]) = false
| valid([Lrap,Rpar) = true
| valid(L::L1) =
例如,“(()()”--> [Lpar,Lpar,Rpar,Lpar,Rpar] 将返回 false 可以看到括号是字符串格式的。我很困惑,因为我必须检查两件事:左边(等于左边)和每个(匹配一个)。如果是这样,那么我将需要创建一些辅助函数。
您能否向我提供有关我的辅助函数应该是什么或更好的实现方式的信息? 太棒了
【问题讨论】:
-
第一个模式没问题。第二,第三和第四模式相当无用,尽管在形式上没有错误。您似乎试图将括号列表视为一个整体。尝试表达这个规则:右括号出现在左括号之后,并且如此递归(在开闭对内,可能有嵌套的开闭对)。这是作业吗?