Haskell-非数字字符串作为整数

时间:2018-09-29 23:30:53

标签: string haskell integer

我正在尝试将非数字字符串转换为整数,然后再次返回。也就是说,我需要一种表示字符串的方式,例如“ Hello world!”。作为唯一整数,然后可以将其转换回相同的字符串。但是,我不知道该怎么做,尤其是在Haskell中,这是我只使用了几周的语言。

谢谢。

1 个答案:

答案 0 :(得分:7)

您可以使用GHC随附的标准库中的readIntshowIntAtBase来完成此任务。

Numeric> base = toInteger (fromEnum (maxBound :: Char)) + 1
Numeric> readInt base (const True) fromEnum "Hello, world!"
[(263317223602531232689798224281528500955719219481801413146983858530815311905,"")]
Numeric> showIntAtBase base toEnum 263317223602531232689798224281528500955719219481801413146983858530815311905 ""
"Hello, world!"

有一个小警告:您需要编写一个以某种方式处理空字符串的包装器-也许将其映射到-1,或将其他所有答案都按1或类似的东西。从好的方面来看,这对特定的函数对具有您不需要的好属性,即每个(非负)整数都对应一个唯一的字符串。