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))
我有这个函数检查解析器的列表,如果他们工作与否。我收到错误: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))
与fn
定义的函数可以具有多个箱子,正如与fun
定义的函数。所以你可以写一些像fun pat1 => exp1 | pat2 => exp2
这样的东西。这意味着当SML解析器在第2行开头看到|
时,它假定它属于第1行的fn
,而不属于fun
(因为fn
最近出现)。所以当它到达=
时,它很困惑,因为它预期为=>
。
要解决您的问题,在第1行用括号括住fn
。
+1它比我想象的微妙:)。 – pad 2013-02-15 19:55:48