【问题标题】:Why is this SML function returning a syntax error?为什么此 SML 函数返回语法错误?
【发布时间】:2015-03-23 23:10:35
【问题描述】:
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 返回一个函数并返回一个函数。这就是我在这里所做的,据我所知,我正在关注这些类型。可能有一些我没有看到的简单的东西。

【问题讨论】:

    标签: function functional-programming sml smlnj ml


    【解决方案1】:

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

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

    fun first_answer f xs = List.mapPartial f xs
    

    或者,事实上,

    val first_answer = List.mapPartial
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      相关资源
      最近更新 更多