(sml)语法错误



我有一个函数,它检查解析器列表是否工作。我得到错误: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上用括号括起来。