Я следую за этим Haskell tutorial и нахожусь в разделе функций более высокого порядка. Она определяет функцию, называемую цепочку как:Вложенные списки в Haskell
chain :: (Integral a) => a -> [a]
chain 1 = [1]
chain n
| even n = n:chain (n `div` 2)
| odd n = n:chain (n * 3 + 1)
Существует упражнение, чтобы найти количество «цепочек», которые имеют длину больше, чем 15. Они делают это так:
numLongChains :: Int
numLongChains = length (filter isLong (map chain [1..100]))
where isLong xs = length xs > 15
Я пытаюсь чтобы понять, что вместо того, чтобы дать мне количество цепочек, я даю список цепочек, которые длиннее 15 из [1..100]. Моя ближайшая попытка до сих пор выглядит следующим образом:
[ [ a | a <- chain b, length a > 15] | b <- [1..100]]
, но я получаю:
<interactive>:9:14:
No instance for (Integral [a0]) arising from a use of `chain'
Possible fix: add an instance declaration for (Integral [a0])
In the expression: chain b
In a stmt of a list comprehension: a <- chain b
In the expression: [a | a <- chain b, length a > 15]
<interactive>:9:45:
No instance for (Enum [a0])
arising from the arithmetic sequence `1 .. 100'
Possible fix: add an instance declaration for (Enum [a0])
In the expression: [1 .. 100]
In a stmt of a list comprehension: b <- [1 .. 100]
In the expression:
[[a | a <- chain b, length a > 15] | b <- [1 .. 100]]
<interactive>:9:46:
No instance for (Num [a0]) arising from the literal `1'
Possible fix: add an instance declaration for (Num [a0])
In the expression: 1
In the expression: [1 .. 100]
In a stmt of a list comprehension: b <- [1 .. 100]
Am Я даже близко? Я хочу решить эту проблему, используя вложенное понимание ради обучения, несмотря на возможные более эффективные способы приблизиться к этому.
пришел сюда точно в том же месте в учебнике! –