2010-12-01 156 views
4

我想知道是否有簡單的方法將[5,2,10]轉換爲"52a"。 如果不是這種情況,我想把任何數字> 9與相應的字母相關聯。Haskell int list to String

在此先感謝。

+6

對於大於36的數字會發生什麼? – 2010-12-01 13:07:57

回答

9

您想要對列表中的每個元素執行某些操作以獲取新列表。換句話說,你想要爲每個元素應用一個函數(你必須定義自己)。這是Prelude的地圖功能。

要在整數和單個字符之間進行轉換,可以使用Data.Char模塊中的chr和ord函數。

所以,

map (\i -> if i < 10 then chr (i + ord '0') else chr (i - 10 + ord 'a')) 

是類型的函數[INT] - >字符串,你想要做什麼(檢查包括沒有錯誤,雖然)。

+1

我害怕思考當i> 255時會發生什麼:D – 2010-12-01 13:27:13

+0

至少在GHC上,當chr函數的參數超出unicode Chars(0 .. 0x10FFFF)的合法範圍時,它將拋出一個異常。在這之前的事情看起來很有創意...... – wolfgang 2010-12-01 13:42:24

7

較慢但更加優雅:

f = map ((['0'..'9'] ++ ['a'..'z']) !!) 

如果您的號碼是0-15使用map intToDigit從Data.Char。