函数调用超出where子句的范围

时间:2011-11-13 23:29:13

标签: haskell functional-programming scope where-clause list-comprehension

我有函数pyths

-- takes an Int and returns a list of pythagorean triples whose components 
---- are at most the given Int
pyths :: Int a => a -> [(Int, Int, Int)]
pyths n = [(x, y, z) | x <- f, y <- f, z <- f, x^2 + y^2 == z^2] 
  where f = factors n

我收到factors超出范围的错误。 如何编写此功能以便 范围内的

我试过了:

pyths n = [(x, y, z) | x <- f, y <- f, z <- f, x^2 + y^2 == z^2 where f = factors n]

pyths n = [(x, y, z) | x <- f, y <- f, z <- f, x^2 + y^2 == z^2, where f = factors n]

但后来我只是语法错误。


注意: 我知道这可能实际上并不是我打算做的事情。

1 个答案:

答案 0 :(得分:4)

正如sepp2k所说,你需要定义factors。在您的示例中,您可以更改定义f的位置,其中使用了定义中的因子,但没有您说的位置:

factors x = ...

由于Haskell前奏或其他基本库中没有定义factors函数,因此您必须自己编写。我希望primes包对您有用。