вызов функции вне области действия в предложении where - PullRequest
0 голосов
/ 14 ноября 2011

У меня есть функция 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 Ответ

4 голосов
/ 14 ноября 2011

Как сказал sepp2k, вам нужно определить factors.В ваших примерах вы меняете, где определено f, которое использует факторы в своем определении, но не указываете, где вы говорите:

factors x = ...

Поскольку в прелюдии Haskell или другой функции не определена функция factorsбазовые библиотеки, вы должны написать это самостоятельно.Я ожидаю, что пакет primes будет вам полезен.

...