簡體   English   中英

整數到單整數的列表-Haskell

[英]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


1 除了在Haskell中實現純函數通常非常簡單之外...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM