gpt4 book ai didi

Haskell - 列表理解,创建/扩展元组列表

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

我正在尝试为元组列表制定紧凑的更新规则。

这是更新规则的示例:

rule1: [(a,b) | (a,b) <- zip [1..3] [2..4]]
λ:[(1,2),(2,3),(3,4)]

我想要什么:

rule2: [(a,b) (b,a) | (a,b) <- zip [1..3] [2..4]]
λ(expected):[(1,2),(2,1),(2,3),(3,2),(3,4),(4,3)]

在 Haskell 的列表理解中,这样的事情可能吗?


一个可行的解决方案,但我发现它有点难看:

concat [[(a,b),(b,a)] | (a,b) <- zip [1..3] [2..4]]
λ: [(1,2),(2,1),(2,3),(3,2),(3,4),(4,3)]

最佳答案

首先,在您的rule1中,您根本不需要列表理解。 zip 的结果已经是您想要的元组列表:

rule1 = zip [1..3] [2..4]

对于 rule2,但是,您可以仅使用两个嵌套生成器,第二个生成器从第一个生成器的每个元素派生,如下所示:

rule2 = [p | (a, b) <- zip [1..3] [2..4], p <- [(a, b), (b, a)]]

或者,在不解构元组的情况下,使用 swap相反:

rule2 = [p | p0 <- zip [1..3] [2..4], p <- [p0, swap p0]]

关于Haskell - 列表理解,创建/扩展元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69600973/

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