Mar*_*cel 2 haskell functional-programming list-comprehension
我正在学习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]
Run Code Online (Sandbox Code Playgroud)
那么为什么不说:
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]
Run Code Online (Sandbox Code Playgroud)
?
我希望元素的排序方式与我的第一个例子完全相同.我想要所有元素,其中c = a + b,然后是所有元素,其中c = ab.
请注意,在我的第二个代码中,订单不是我想要的.我似乎无法弄清楚我是如何在列表理解中命令的,特别是当我有元组时...
谢谢!
(+),(-)在第一个生成器中选择功能.
listComprehension =
[(a,b,c) | f <- [(+),(-)], a <- xs, b <- xs, c <- ys, even c, c == f a b ]
where xs = [1..4]; ys = [(-100)..100]
Run Code Online (Sandbox Code Playgroud)
顺便说一下,这是一种低效的方法.c <- ys我们不应该尝试每一个,而应该let c = f a b检查是否-100 <= c && c <= 100(和均匀度).以这种方式,我们使代码快200倍.