2013-02-15 49 views
0

我有这个函数检查解析器的列表,如果他们工作与否。我收到错误:EQUALO LPAREN FN。任何帮助?(sml)语法错误?

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)) 

回答

3

fn定义的函数可以具有多个箱子,正如与fun定义的函数。所以你可以写一些像fun pat1 => exp1 | pat2 => exp2这样的东西。这意味着当SML解析器在第2行开头看到|时,它假定它属于第1行的fn,而不属于fun(因为fn最近出现)。所以当它到达=时,它很困惑,因为它预期为=>

要解决您的问题,在第1行用括号括住fn

+0

+1它比我想象的微妙:)。 – pad 2013-02-15 19:55:48