gpt4 book ai didi

Haskell 列表理解顺序元素/元组

转载 作者:行者123 更新时间:2023-12-02 16:03:24 28 4
gpt4 key购买 nike

我目前正在学习 Haskell,在 FP 方面我绝对是初学者。

现在我正在尝试使用列表推导式进行不同的操作。

 listComprehension  = [(a,b,c) | a <- xs, b <- xs, c <- ys, even c, c == a+b] ++
[(a,b,c) | a <- xs, b <- xs, c <- ys, even c, c == a-b]
where xs = [1..4]; ys = [(-100)..100]

那么为什么不说:

 listComprehension  = [(a,b,c) | a <- xs, b <- xs, c <- ys, even c, c == a+b || c == a-b]
where xs = [1..4]; ys = [(-100)..100]

我希望元素的排序与我的第一个示例完全相同。我想要 c = a+b 的所有元素,然后是 c = a-b 的所有元素。

请注意,在我的第二个代码中,顺序不是我想要的。我似乎无法弄清楚如何在列表理解中对事物进行排序,特别是当我有元组时..

谢谢!

最佳答案

在功能之间选择 (+),(-)在第一个生成器中。

listComprehension =
[(a,b,c) | f <- [(+),(-)], a <- xs, b <- xs, c <- ys, even c, c == f a b ]
where xs = [1..4]; ys = [(-100)..100]

顺便说一句,这是一种低效的方法。而不是尝试每一个 c <- ys ,我们应该改为let c = f a b然后检查是否-100 <= c && c <= 100 (和均匀度)。通过这种方式,我们使代码速度提高了约 200 倍。

关于Haskell 列表理解顺序元素/元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50220695/

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