gpt4 book ai didi

arrays - elm:使用 foldr 展平列表或数组

转载 作者:行者123 更新时间:2023-12-01 12:12:40 25 4
gpt4 key购买 nike

我正在学习 elm 并正在尝试构建一个小型位图编辑器。它几乎可以工作,但表现出非常奇怪的行为......所以在 repl 中尝试了一些东西之后,这种行为似乎起源于此:展平二维阵列。

假设我创建了这两个 3x3 数组:

> import Array exposing (..)

> ones = repeat 3 1 |> repeat 3

Array.fromList
[Array.fromList [1,1,1]
,Array.fromList [1,1,1]
,Array.fromList [1,1,1]]
: Array.Array (Array.Array number)

> grid = initialize 3 <| \j -> initialize 3 <| \i -> (i,j)

Array.fromList
[Array.fromList [(0,0),(1,0),(2,0)]
,Array.fromList [(0,1),(1,1),(2,1)]
,Array.fromList [(0,2),(1,2),(2,2)]]
: Array.Array (Array.Array ( Int, Int ))

以我为例 ones是一个单色位图,但有一个而不是 "#fff"{r=15, g=15, b=15}在下面产生同样尴尬的结果。然后我申请一些 List.map2onesgrid生成我的 <rect>元素。为此,我使用 Array.foldr 展平了这些二维数组。 ,在将它们变成列表之前。

这就是……开始的地方:

> flatten plane = plane |> foldr append  (fromList [])
<function> : Array.Array (Array.Array a) -> Array.Array a

> flatten ones |> length
12 : Int

> flatten grid |> length
9 : Int

对列表进行同样的尝试:

>:reset
Environment Reset
> import List exposing (..)

> ones = repeat 3 1 |> repeat 3
[[1,1,1],[1,1,1],[1,1,1]] : List (List number)

> flatten plane = plane |> foldr (++) []
<function> : List (List a) -> List a

> flatten ones |> length
9 : Int

所以这种奇怪的扁平化不会发生在列表中,但它不会发生在我使用 initialize 创建的数组中任何一个...那么这是从哪里来的???

编辑:正如 Luke Woodward 在下面所建议的,这似乎是当前 Array 实现中的一个错误,请参阅 git issue .

最佳答案

在我看来,这像是 Elm 的 Array 模块 ( Issue with Array.append ) 中的错误。

该错误将在 Elm 0.19 中修复。在发布之前,要么使用第三方阵列包,例如 Skinney/elm-array-exploration ,或者不用 Array 就可以了。

关于arrays - elm:使用 foldr 展平列表或数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50658633/

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