【问题标题】:How to get the map function to not return something?如何让地图函数不返回一些东西?
【发布时间】:2013-01-26 01:32:06
【问题描述】:

在 sml nj 中,如果您使用 map 函数,您基本上对列表中的每个元素 x 说,在其上应用函数 f,并返回新值的列表,但可以说 @987654323 @ 返回一个字符串,并在f 中进行比较,如果比较为真,则返回字符串,但如果为假,则不返回任何内容,并且没有任何内容放入该映射的列表中目前正在建设中。

这可能吗?

【问题讨论】:

  • 您不能在 SML 中拥有一个不返回 anything 的函数 - 但您可能有一个返回 ()、空列表或 NONE 的函数。

标签: iteration sml smlnj currying higher-order-functions


【解决方案1】:

不要使用map,而是使用fold 的变体之一(foldlfoldr)。当然,另一种选择是在执行map 之前简单地执行filter

作为一个简单的例子,假设您想要返回一个平方整数列表,但前提是原始整数是偶数。 filter-then-map 方法可能如下所示:

fun square_evens xs =
  (List.map (fn x => x * x)) (List.filter (fn x => x mod 2 = 0) xs)

或者,您可以使用foldr 方法。

fun square_evens xs =
  List.foldr (fn (x, xs') =>
    if x mod 2 = 0
    then (x * x) :: xs'
    else xs') [] xs

稍微长一点,但可以说更清晰,而且可能更有效。

【讨论】:

  • 这是一个柯里化函数吗? (使用文件夹)
  • @omega:是的。你可以找到它的文档here
猜你喜欢
  • 1970-01-01
  • 2016-09-25
  • 2020-05-13
  • 2018-01-28
  • 2016-11-10
  • 2019-04-16
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
相关资源
最近更新 更多