Преобразование числовой базы

Есть ли функция платформы, которая будет делать следующее?

convertBase :: (Num a, Num b) => Int -> Int -> [a] -> [b]

Преобразовать число из базы 'а'; основывать "b" где каждый элемент списка является цифрой в номере. например:

convertBase 2 10 [1,1,0,1] = [1, 3]

I hope that makes sense, let me know if i can clear anything up

 j13r05 апр. 2012 г., 14:24
под функцией платформы вы подразумеваете часть стандартных библиотек?
 Frerich Raabe05 апр. 2012 г., 14:49
Почему различают типыa а такжеbне они просто некоторыеIntegral?
 user18135105 апр. 2012 г., 14:25
или даже на взлом

Ответы на вопрос(3)

Пара идей:

use showIntAtBase or Text.printf to convert to a string, and convert back to a different base write it yourself -- easier when one base is always a multiple of the other

Вот ссылка, которая может вам помочь:http://rosettacode.org/wiki/Non-decimal_radices/Convert#Haskell - Недесятичные радиусы / Конвертировать

Решение Вопроса

С использованиемцифры пакет от Hackage:

import Data.Digits (digits, unDigits)

convertBase :: Integral a => a -> a -> [a] -> [a]
convertBase from to = digits to . unDigits from

Вы можете добавитьfromIntegral там, если вам нужно, чтобы типы ввода и вывода были разными. Так жеIntegral ограничение имеет больше смысла, чемNumпоскольку вы, вероятно, не хотите иметь дело со сложными или с плавающей запятой цифрами.

 24 мая 2015 г., 12:53
Полученная функция принимает список интегралов. Если я создамdecToBin = convertBase 10 2что значит использоватьdecToBin [10,10]?
 24 мая 2015 г., 12:56
О, я узнал, чтоdecToBin [10, 10] такой же какdecToBin [1010], Он просто объединяет все числа в списке.

Самая близкая вещь в платформе haskell от модулячисловой:

readInt :: Num a => a -> (Char -> Bool) -> (Char -> Int) -> ReadS a
showIntAtBase :: Integral a => a -> (Int -> Char) -> a -> ShowS

fromBase :: Int -> String -> Int
fromBase base = fst . head . readInt base ((<base).digitToInt) digitToInt

toBase :: Int -> Int -> String
toBase base num = showIntAtBase base intToDigit num ""

fromBaseToBase :: Int -> Int -> String -> String
fromBaseToBase from to = toBase to . fromBase from
 16 нояб. 2016 г., 15:34
Что легко расширяемо, если вы предоставите свой собственный "intToDigit" базы поддержки функций & gt; 16
 05 апр. 2012 г., 23:35
Я хочу добавить, что это работает только до базы 16

Ваш ответ на вопрос