[英]List of integers to single integer - Haskell
在Haskell中,我似乎正在嘗試一些本應非常簡單的事情,但是我只是想不通,我需要一些幫助。 我正在嘗試轉換整數列表([3,2,1])並將其轉換為單個整數(321)。
這是我到目前為止的內容:
fromDigits :: [Integer] -> Integer
fromDigits [] = 0;
fromDigits (x:xs) = x : fromDigits (xs)
我究竟做錯了什么?
您可以使用工作程序包裝器方法執行此操作:
fromDigits :: [Integer] -> Integer
fromDigits xs = aux xs 0
where aux [] acc = acc
aux (x:xs) acc = aux xs ((acc * 10) + x)
演示:
λ> fromDigits [3,2,1]
321
甚至可以使用高階函數foldl
:
λ> foldl' (\acc x -> (acc * 10) + x) 0 [1,2,3]
123
這不是轉換。 列表[3,2,1]
可能看起來像數字321
,但不是一對一的關系(正如Greg提到的[32,1]
看起來是相同的數字),並且最肯定不是規范的(為什么要使用基數10?實際上是十六進制嗎?)因此,實際上沒有理由在Haskell 1中 應該特別簡單。 幸運的是,這不是JavaScript 。
重復消息... 看起來像數字321
,僅此而已,它與數字實際上沒有任何有意義的關系。 因此,如果您真的需要實現值得懷疑的功能(我認為您不應該這樣做),那么您也可以進行破解以實際利用“看起來”東西。 即
fromDigits = read . filter (not . (`elem`"[,]")) . show
這使用Show
的列表實例, 將列表[3,2,1]
轉換為實際的字符串"[3,2,1]"
,然后丟棄與列表相關的字符,並讀取連接的字符串"321"
返回,得出數字321
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.