2012-01-16 5 views
7

私はStringのように"1 2 3 4 5"を持っています。 Haskellの[1,2,3,4,5]のような整数のリストに変換するにはどうすればいいですか?リストが"12345"の場合はどうなりますか?文字列をHaskellの整数のリストに変換するには

+9

-1、あなたはあなたがしようとしているコードを追加することはできますか? – Reddy

答えて

21

あなたはここで我々は["1", "2", "3", "4", "5"]を得るように空白に"1 2 3 4 5"を分割するwordsを使用

Prelude> map read $ words "1 2 3 4 5" :: [Int] 
[1,2,3,4,5] 

を使用することができます。 read関数は、個々の文字列を整数に変換できるようになりました。それはタイプRead a => String -> aを持っているので、実際にReadタイプのクラスにあるものに変換することができ、それにはIntが含まれています。上記の型を指定する必要がある戻り型の型変数のためです。

スペースを含まない文字列の場合、各Charを単一要素のリストに変換する必要があります。これは、(:"")を適用することによって行うことができます。Stringは、単なるCharのリストです。 digitToIntと呼ばれるモジュールData.Charで定義された関数であり

Prelude> map (read . (:"")) "12345" :: [Int] 
[1,2,3,4,5] 
+1

おかげでたくさんのマーティン.. uロック.. –

8

エラー処理は練習として残されています。 (ヒント:あなたは別の戻り値の型が必要になります)

+0

私はあなたがq2 =を意味すると思う.. .. q2 :: – aelguindy

+0

ありがとうございます@helguindy。 – dave4420

2

:私たちは、それ以前のように再びreadを適用します。文字が16進数字として解釈される限り、それは文字を受け取り、数字を返します。

この関数を最初の例で使用する場合、数字がスペースで区切られている場合は、スペースを避ける必要があります。

> map digitToInt "1212121" 
[1,2,1,2,1,2,1] 

私は推測すると思いますが、フィルタを必要としないので、あなたは全く分離されていない数字は、さらに簡単です単純なフィルタ

> map digitToInt $ filter (/=' ') "1 2 1 2 1 2 1" 
[1,2,1,2,1,2,1] 

第2の例でそれを行うことができますdigitToIntは、式の型に依存しないため、読みにくくなる可能性があります(これはどのようにしてこのポスト= Pを見つけたのですか)。とにかく、私はhaskellに新しいので、間違っているかもしれない=)。

0

あなたは使用することができます。

> [read [x] :: Int | x <- string] 
関連する問題