为什么此 SML 函数返回语法错误?
Why is this SML function returning a syntax error?
fun first_answer(my_f:('a -> 'b option)) : 'a list -> 'b =
let
fun help(_a:'a list) : 'a =
(((List.map valOf)o(List.filter isSome)o(List.map my_f)) _a)
in
help
end;
Error: syntax error: replacing WILD with SEMICOLON
_a 搞砸了......错误与 _a
的最后一次使用有关
我并没有走得太远,我已经用很多方法重新安排了逻辑。如您所见,first_answer returns 接受一个函数,returns 接受一个函数。这就是我在这里所做的,据我所知,我正在关注这些类型。可能有些简单的东西我没有看到。
其实很简单:标识符不能以下划线开头。所以 _a
被解析为就好像你写了 _ a
,按照通常的 maximal munch 词法语法规则。
编辑:额外提示:您的函数没有 'a list -> 'b
类型,因为 help
returns [=16] 的列表=]s,不是 'b
类型的单个值。此外,如所写,它可以更容易地实现为
fun first_answer f xs = List.mapPartial f xs
或者,事实上,
val first_answer = List.mapPartial
fun first_answer(my_f:('a -> 'b option)) : 'a list -> 'b =
let
fun help(_a:'a list) : 'a =
(((List.map valOf)o(List.filter isSome)o(List.map my_f)) _a)
in
help
end;
Error: syntax error: replacing WILD with SEMICOLON
_a 搞砸了......错误与 _a
我并没有走得太远,我已经用很多方法重新安排了逻辑。如您所见,first_answer returns 接受一个函数,returns 接受一个函数。这就是我在这里所做的,据我所知,我正在关注这些类型。可能有些简单的东西我没有看到。
其实很简单:标识符不能以下划线开头。所以 _a
被解析为就好像你写了 _ a
,按照通常的 maximal munch 词法语法规则。
编辑:额外提示:您的函数没有 'a list -> 'b
类型,因为 help
returns [=16] 的列表=]s,不是 'b
类型的单个值。此外,如所写,它可以更容易地实现为
fun first_answer f xs = List.mapPartial f xs
或者,事实上,
val first_answer = List.mapPartial