我有一个函数,它检查解析器列表是否工作。我得到错误:EQUALO LPAREN FN。有什么帮助吗?
fun oneOf [] = fn inp => NONE
| oneOf (p::ps) = (fn inp => case parse p inp of
NONE => oneOf ps inp
| SOME (v,out) => SOME (v,out))
用fn
定义的函数可以有多种情况,就像用fun
定义的函数一样。所以你可以写一些类似fun pat1 => exp1 | pat2 => exp2
的东西。这意味着,当SML解析器在第2行的开头看到|
时,它假设它属于第1行的fn
,而不是fun
(因为fn
是最近出现的)。因此,当它到达=
时,它会感到困惑,因为它期望=>
。
要解决您的问题,请在第1行的fn
上用括号括起来。