Преобразовать список цифр в число HASKELL - PullRequest
0 голосов
/ 04 ноября 2018

Я хочу сделать функцию в haskell, которая дает список из одной цифры, я делаю полное число. Я думал об использовании интенсивных списков и покровителей, как код, который следует:

funcion5 (x:xs) = [y*(10^w) | y <- (x:xs) w]

Идея состоит в том, чтобы пройти по списку и умножить каждую цифру до 10 pow до позиции числа. Наконец, мне нужно только сложить все цифры, и у меня есть такое число:

sum (funcion5 (x:xs))

Кто-нибудь может мне помочь, пожалуйста? Спасибо

Ответы [ 3 ]

0 голосов
/ 04 ноября 2018

Для этого вы можете использовать шаблон "сгиба". Таким образом, мы записываем это в терминах foldl :: (a -> b -> a) -> a -> [b] -> a:

function5 :: Num n => [n] -> n
function5 = foldl f 0
    where f a x = ...

Таким образом, здесь f принимает два параметра a (созданное до сих пор число) и x следующую цифру.

В системе позиционной нотации можно получить значение, «сканируя» слева направо и каждый раз умножая полученное таким образом значение на основание и добавляя следующую цифру. Так что это логика, которую вам нужно «кодировать» в f: взять полученное на данный момент значение и следующую цифру и получить следующее значение.

0 голосов
/ 04 ноября 2018
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))
0 голосов
/ 04 ноября 2018

Это можно просто сделать, сложив с foldl1 :: Foldable t => (a -> a -> a) -> t a -> a следующим образом:

Prelude> foldl1 (\x y -> 10*x+y) [1,2,3]
123
...