为什么这个SML函数返回语法错误?

时间:2015-01-25 09:08:50

标签: function functional-programming sml smlnj ml

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返回接受一个函数并返回一个函数。这就是我在这里所做的,据我所知,我正在遵循这些类型。我可能没有看到一些简单的东西。

1 个答案:

答案 0 :(得分:4)

确实很简单:标识符不能以下划线开头。因此,_a将被解析,就像您根据通常的 maximal munch 规则编写_ a一样。

编辑:额外提示:您的函数没有'a list -> 'b类型,因为help会返回'b的列表,而不是单个值输入'b。而且,正如所写,它可以更容易实现

fun first_answer f xs = List.mapPartial f xs

或者,事实上,

val first_answer = List.mapPartial