[英]Haskell - Signature and Type error
我是 Haskell 的新手,我在函數簽名和類型方面遇到了一些問題。 這是我的問題:
我試圖用 1 到 999 之間的每個數字制作一個列表,這些數字可以除以它自己數字的每個數字。 例如,數字 280 可以在該列表中,因為 2+8+0=10 和 280/10 = 28 ...另一方面,123 不能,因為 1+2+3=6 和 123/6=20, 5. 當最后的操作給你一個十進制的數字時,它永遠不會出現在那個列表中。
這是我的代碼:
let inaHelper x = (floor(x)`mod`10)+ (floor(x/10)`mod`10)+(floor(x/100)`mod`10)
第一部分只會對數字的每個數字求和。 這部分工作...
這是最后一部分:
let ina = [x | x <- [1..999] , x `mod` (inaHelper x) == 0 ]
最后一部分應該列出清單並驗證它是否在清單上。 但它給出了這個錯誤:
No instance for (Integral t0) arising from a use of ‘it’
The type variable ‘t0’ is ambiguous
Note: there are several potential instances:
instance Integral Integer -- Defined in ‘GHC.Real’
instance Integral Int -- Defined in ‘GHC.Real’
instance Integral Word -- Defined in ‘GHC.Real’
In the first argument of ‘print’, namely ‘it’
In a stmt of an interactive GHCi command: print it
...
ina = [x | x <- [1..999] , x `mod` (inaHelper x) == 0 ]
x
的類型是什么? Integer
? Int
? Word
? 上面的代碼非常通用,適用於任何整數類型。 如果我們嘗試打印它的類型,我們會得到這樣的結果
> :t ina
ina :: (Integral t, ...) => [t]
這意味着結果是我們想要的任何類型t
的列表,前提是t
是一個整數類型(以及一些其他約束)。
當我們要求 GHCi 打印結果時,GHCi 需要選擇x
的類型,但不能明確決定。 這就是錯誤消息所述的內容。
打印結果時嘗試指定類型。 例如
> ina :: [Int]
這將使 GHCi 選擇類型t
為Int
,消除歧義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.