我一直在爲此掙扎半個多小時。我知道這很簡單,但是我對Haskell類型很糟糕,甚至在閱讀了與我的類似問題的可接受答案之後,我仍然無法解決我的問題 - 更別說理解它了!Haskell中的類型問題
代碼:
p108 = [filter (\[a,b] -> a>0 && b>0) (diophantinepairs n) | n <- [1..]]
diophantinepairs :: Integer -> [[Integer]]
diophantinepairs n = nub$map sort b
where
a = divisors n
b = [[(n-d), n - (n^2)/d] | d <- a]
錯誤:
249:39: No instance for (Fractional Integer) arising from a use of `/' Possible fix: add an instance declaration for (Fractional Integer) In the second argument of `(-)', namely `(n^2)/d' In the expression: n - (n^2)/d In the expression: [(n - d), n - (n^2)/d]
感謝, 薩姆。
覆蓋備選方案的良好答案。在這種特殊情況下,假設除數符合廣告標準,d除以n,所以山姆可以使用div來得到這個整數答案。 – AndrewC
請注意,'div'計算歐幾里得除法的商,'''在數學上有點不太有趣,因爲它只是反映在0左右,但另一方面,在大多數硬件上(「CPU指令」 ),並且考慮到你正在使用自然整數(儘可能多)... – Jedai
@Jedai:對於Integer,它們將是相同的速度,因爲'Integer'分別存儲了符號和大小。至少對於整數大於一個單詞。 –