2010-12-01 10 views
4

[5,2,10]"52a"にする簡単な方法があるかどうかを知りたいと思います。 この場合だけでなく、9より大きい数字を対応する文字に関連付ける必要があります。ハスケルintリストから文字列

ありがとうございます。

+6

36より大きい数値はどうなりますか? –

答えて

9

新しいリストを取得するには、リストの各要素に何かしたいことがあります。つまり、各要素に(自分で定義する必要がある)関数を適用したいとします。これは、Preludeのマップ関数のためのものです。

整数と個々の文字を変換するには、Data.Charモジュールのchrおよびord関数を使用できます。

ので、

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

はタイプの関数[INT]です - あなたは何をしたいん>文字列(エラーが含まれていないチェック、けれども)。

+1

私は> 255:D –

+0

で少なくとも何が起こるか考えるのが怖いです。少なくともGHCでは、引数がユニコードのChars(0 .. 0x10FFFF)の有効範囲外のときにchr関数が例外をスローします。物事はむしろ...創造的に見えます。それよりずっと前です。 – wolfgang

+0

これは私が目指していたものに対して完璧に動作します – Mares

7

遅いが、よりエレガント:

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

あなたの番号は0から15 Data.Char使用map intToDigitしている場合。

+0

+1の 'intToDigit' – newacct

関連する問題