gpt4 book ai didi

Haskell 泛化问题(涉及列表理解)

转载 作者:行者123 更新时间:2023-12-02 21:26:35 25 4
gpt4 key购买 nike

假设我想知道 (x, y) 平面上位于矩形 has 中的所有点。

我可以使用列表推导式来计算,这样:

let myFun2D = [(x, y) | x <- [0..2], y <- [0..2]]

现在,如果我想对 (x, y, z) 空间完成相同的操作,我可以采用相同的方法:

let myFun3D = [(x, y, z) | x <- [0..2], y <- [0..2], z <- [0..2]]

有没有办法将其推广到任意数量的维度?如果是,怎么办?

let myFunGeneralized = ?

谢谢

最佳答案

不幸的是,因为 [(a,a)][(a,a,a)] 等是不同的类型,所以你不能编写一个函数代表他们所有人。

无论如何,一般来说你可以使用

Prelude> let x = [0..2]
Prelude> import Control.Applicative
Prelude Control.Applicative> (,,) <$> x <*> x <*> x
[(0,0,0),(0,0,1),(0,0,2),(0,1,0),(0,1,1),(0,1,2),(0,2,0),(0,2,1),(0,2,2),(1,0,0),(1,0,1),(1,0,2),(1,1,0),(1,1,1),(1,1,2),(1,2,0),(1,2,1),(1,2,2),(2,0,0),(2,0,1),(2,0,2),(2,1,0),(2,1,1),(2,1,2),(2,2,0),(2,2,1),(2,2,2)]

如果您想要一个[[a]],有一个非常简单的函数:

Prelude> sequence (replicate 3 x)
[[0,0,0],[0,0,1],[0,0,2],[0,1,0],[0,1,1],[0,1,2],[0,2,0],[0,2,1],[0,2,2],[1,0,0],[1,0,1],[1,0,2],[1,1,0],[1,1,1],[1,1,2],[1,2,0],[1,2,1],[1,2,2],[2,0,0],[2,0,1],[2,0,2],[2,1,0],[2,1,1],[2,1,2],[2,2,0],[2,2,1],[2,2,2]]

或者(感谢 sdcvvc)

Prelude> import Control.Monad
Prelude Control.Monad> replicateM 3 x
[[0,0,0],[0,0,1],[0,0,2],[0,1,0],[0,1,1],[0,1,2],[0,2,0],[0,2,1],[0,2,2],[1,0,0],[1,0,1],[1,0,2],[1,1,0],[1,1,1],[1,1,2],[1,2,0],[1,2,1],[1,2,2],[2,0,0],[2,0,1],[2,0,2],[2,1,0],[2,1,1],[2,1,2],[2,2,0],[2,2,1],[2,2,2]]

关于Haskell 泛化问题(涉及列表理解),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3742235/

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