【发布时间】:2015-04-14 03:39:58
【问题描述】:
我知道 Elm 既没有 for 循环(不足为奇)也没有理解(有点令人惊讶)。我知道map 将用于人们可能期望理解的地方。
但是如何从三个范围变量构建一组 3 元组?我对生成这些元组很感兴趣,在 Python 中生成这些元组很简单:
>>> [(x,y,z) for z in range(5) for y in range(z) for x in range(y)]
[(0, 1, 2), (0, 1, 3), (0, 2, 3), (1, 2, 3), (0, 1, 4), (0, 2, 4),
(1, 2, 4), (0, 3, 4), (1, 3, 4), (2, 3, 4)]
我不确定如何在 Elm 中制作它。这是我尝试过的:
import Text (asText)
import List (map)
main =
asText <| map (\z -> map (\y -> map (\x -> (x,y,z)) [0..y-1]) [0..z-1]) [0..4]
这会产生
[[],[[]],[[],[(0,1,2)]],[[],[(0,1,3)],[(0,2,3),(1,2,3)]],
[[],[(0,1,4)],[(0,2,4),(1,2,4)],[(0,3,4),(1,3,4),(2,3,4)]]]
接近但需要展平。
我是 Elm 新手,所以我不知道生成这些元组的正确方法。我可能会弄清楚如何展平我想出的列表,代码本身似乎相当冗长(我应该使用List.map3 代替吗?)对于大数字范围,我想按需生成值。有没有办法将这些值生成为信号?
【问题讨论】: