【发布时间】:2018-05-07 18:51:49
【问题描述】:
我目前正在学习 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 的所有元素。
请注意,在我的第二个代码中,订单不是我想要的。我似乎无法弄清楚我是如何在列表理解中排序的,特别是当我有元组时..
谢谢!
【问题讨论】:
-
您的第二个列表压缩比大多数都高效得多。它的输出是一个非常短的列表。-- 用 [(a,b,c) |(a,b,c)partition (\(a,b,c) -> c == a+b) lc1在一个元组中生成两个列表。– fp_mora 22 hours ag
-
此外,当您可以设置它们时,从
y中选择值是多余的。结果是一样的。let xs = [1..4] in [(a,b,c) | a <- xs, b <- xs, c <- [(a-b),(a+b)], even c]
标签: haskell functional-programming list-comprehension