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