我对SML很新,我试图编写一个确定字符串是否平衡的函数。 平衡字符串是: 1.一个字符串,其中"("出现次数等于")"的数量。 2.在每个前缀")"不会发生超过"("。 例如:")("不平衡,因为第二个条件不适用。
我编写了这段代码,但我收到了编译错误:
fun balanceAux(s:string , i:int , c1:int , c2:int) : bool =
if i = size(s)-1 then
if c1=c2 then true
else false
else
if c2>c1 then false
else
if (str(String.sub(s,i)) = "(") then balanceAux(s,i+1,c1+1,c2)
else
if (str(String.sub(s,i)) = ")") then balanceAux(s,i+1,c1,c2+1);
else balanceAux(s,i+1,c1,c2);
fun balance(t:string) : bool =
balanceAux(t,0,0,0);
我收到3个编译错误:
插入LPAREN
插入LET
任何想法我做错了什么?我读到它可能与我的代码表达式有关:
如果A然后B否则如果C则D
但我无法理解我能做些什么。
答案 0 :(得分:0)
你在第10行末尾有一个分散的分号。
从命令式语言到SML可能会感到奇怪,但SML中的分号实际上很少见。在您的示例中,根本不需要分号。
请注意,如果您将其复制粘贴到SML / NJ REPL中,则最后需要一个分号来告诉REPL您已完成输入。然而,这是特定于交互式SML / NJ会话。
与编译问题无关的旁注:您为平衡字符串提供的定义不是很好。条件2意味着如果输入字符串完全包含“)”,那么它是不平衡的 - 考虑只包含“)”的子字符串;很明显,这个子串比“(”。
更多地出现了“)”也许你的意思是每个前缀,“)”不会超过“(”?