(sml)语法错误?

时间:2013-02-15 19:23:40

标签: types functional-programming 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))

1 个答案:

答案 0 :(得分:3)

使用fn定义的函数可以具有多个案例,就像使用fun定义的函数一样。所以你可以写fun pat1 => exp1 | pat2 => exp2之类的东西。这意味着当SML解析器在第2行的开头看到|时,它会认为它属于第1行的fn,而不是fun(因为fn 1}}最近来了)。所以当它到达=时,它会让人感到困惑,因为它期望=>

要解决您的问题,请在第1行的fn周围加上括号。