使用Haskell生成数字列表

时间:2012-02-07 19:03:14

标签: haskell

毕达哥拉斯三元组是一组三个自然数,a< b< c,为此, a ^(2)+ b ^(2)= c ^(2)。恰好存在一个毕达哥拉斯三重态,其中a + b + c = 1000。

我正在尝试生成一个包含答案的列表:

[200,375,425]

为此,我在Haskell编程:

p = [ [a, b, c] | b <- [1..1000], a <- [1..b], let c = 1000 - b - a, a^2 + b^2 == c^2 && b<c]

这会生成

[[200,375,425]]

如何更改我的解决方案以生成第一个输出(而不是我现在的输出)?

2 个答案:

答案 0 :(得分:3)

head $ [ [a, b, c] | b <- [1..1000], a <- [1..b], let c = 1000 - b - a, a^2 + b^2 == c^2 && b<c]

答案 1 :(得分:3)

看看你的输出。它生成了一个列表,其第一个结果是您想要的结果。有一个函数可以获取一个列表并返回第一个元素 - head。在现有代码的输出上调用head,您将获得所需的结果。