簡體   English   中英

將數字列表轉換為數字HASKELL

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

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