Преобразование списка цифр в число HASKELL

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

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

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

sum (funcion5 (x:xs))

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


person vps    schedule 04.11.2018    source источник
comment
Полезен Метод Хорнера.   -  person chepner    schedule 04.11.2018


Ответы (2)


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

Prelude> foldl1 (\x y -> 10*x+y) [1,2,3]
123
person Redu    schedule 04.11.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: взять полученное на данный момент значение, следующую цифру и создать следующее значение.

person Willem Van Onsem    schedule 04.11.2018