2013-02-15 30 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