gpt4 book ai didi

functional-programming - 我应该如何映射可能列表?

转载 作者:行者123 更新时间:2023-12-04 00:16:32 25 4
gpt4 key购买 nike

我从 Professor Frisby's Mostly Adequate Guide to Functional Programming 回来了似乎对Maybe有误解。

我相信:

map(add1, Just [1, 2, 3])
// => Just [2, 3, 4]

我对上述指南的感觉是 Maybe.map应该尝试调用 Array.map在数组上,基本上返回 Just(map(add1, [1, 2, 3]) .

当我尝试使用 Sanctuary 时的可能类型,以及最近 Elm的 Maybe 类型,我很失望地发现他们都不支持这一点(或者,也许,我不明白他们是如何支持这一点的)。

在圣域,
> S.map(S.add(1), S.Just([1, 2, 3]))
! Invalid value

add :: FiniteNumber -> FiniteNumber -> FiniteNumber
^^^^^^^^^^^^
1

1) [1, 2, 3] :: Array Number, Array FiniteNumber, Array NonZeroFiniteNumber, Array Integer, Array ValidNumber

The value at position 1 is not a member of ‘FiniteNumber’.

在榆树,
> Maybe.map sqrt (Just [1, 2, 3])
-- TYPE MISMATCH --------------------------------------------- repl-temp-000.elm

The 2nd argument to function `map` is causing a mismatch.

4| Maybe.map sqrt (Just [1, 2, 3])
^^^^^^^^^^^^^^
Function `map` is expecting the 2nd argument to be:

Maybe Float

But it is:

Maybe (List number)

同样,我觉得我应该可以治疗 Just(Just(1))作为 Just(1) .另一方面,我对 [[1]] 的直觉完全相反。显然, map(add1, [[1]])应该返回 [NaN]而不是 [[2]]或任何其他东西。

在 Elm 中,我能够执行以下操作:
> Maybe.map (List.map (add 1)) (Just [1, 2, 3])
Just [2,3,4] : Maybe.Maybe (List number)

这是我想做什么,但不是我想怎么做。

一张 map 应该如何覆盖可能列表?

最佳答案

你有两个仿函数要处理:MaybeList .您正在寻找的是将它们组合在一起的某种方式。您可以通过函数组合简化您发布的 Elm 示例:

> (Maybe.map << List.map) add1 (Just [1, 2, 3])
Just [2,3,4] : Maybe.Maybe (List number)

这实际上只是您发布的示例的简写,您说这不是您想要的方式。

圣域有 compose 函数,所以上面的将表示为:

> S.compose(S.map, S.map)(S.add(1))(S.Just([1, 2, 3]))
Just([2, 3, 4])

Similarly, I feel like I should be able to treat a Just(Just(1)) as a Just(1)



这可以使用 join 来完成。来自 elm-community/maybe-extra包裹。

join (Just (Just 1)) == Just 1
join (Just Nothing) == Nothing
join Nothing == Nothing

圣域有 join 功能,因此您可以执行以下操作:

S.join(S.Just(S.Just(1))) == Just(1)
S.join(S.Just(S.Nothing)) == Nothing
S.join(S.Nothing) == Nothing

关于functional-programming - 我应该如何映射可能列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45489857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com