[英]Convert a list of digits to a number HASKELL
我想在haskell中創建一個函數,給出給定的一位數字列表,我給出完整的數字。 我在考慮使用密集列表和顧客,如下所示:
funcion5 (x:xs) = [y*(10^w) | y <- (x:xs) w]
想法是,遍歷列表並將每個數字乘以10到數字的位置。 最后,我只需要對所有數字求和,就得到這樣的數字:
sum (funcion5 (x:xs))
有人可以幫我嗎? 謝謝
這可以簡單地通過使用foldl1 :: Foldable t => (a -> a -> a) -> ta -> a
折疊來完成:
Prelude> foldl1 (\x y -> 10*x+y) [1,2,3]
123
您可以為此使用“折疊”模式。 因此,我們用foldl :: (a -> b -> a) -> a -> [b] -> a
:
function5 :: Num n => [n] -> n
function5 = foldl f 0
where f a x = ...
因此,這里f
取兩個參數a
(到目前為止生成的數字), x
一個數字。
在位置標記系統中 ,可以通過從左到右“掃描”並每次將到目前為止獲得的值與基數相乘,再加上下一位來獲得該值。 因此,這是您需要在f
進行“編碼”的邏輯:獲取到目前為止獲得的值和下一個數字,並產生下一個值。
multiplos_10 = [10^x | x <- [0..]]
aux (x:xs) = sum ([a*b | (a,b) <- zip (x:xs) multiplos_10])
a_numero (x:xs) = aux (reverse(x:xs))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.