2011-11-13 26 views
8

私は別の文字列に4空白区切られた数字の文字列を受け入れ、整数に変換する機能(複数可)を記述しようとしているに置きますそれらを4つの個々の整数変数に置きます。私は、文字列の配列にそれらを分割するsplitWsを使用する個々の要素にアクセスする!!を使用して、整数に変換するには、次のようなものすることができます知っている:変換文字列は、整数に文字列内の数字を分離し、変数

f :: [String] -> [Int] 
f = map read 

しかし、私はそれを置く方法を見つけ出すことはできませんすべて一緒に。

答えて

0

ハスケルには変数は、Haskellの文字列にリストとして表現されている、ありません。だから、

試してみてください。

import Data.List.Utils 
nums=map read $split " " "1 2 3 4" :: [Int] 

あなたは(!!)を持つ単一の要素にアクセスすることができます

> nums(!!)0 
1 

HTHクリス

+0

を'? – nimi

+5

いずれかの代わりに['words'](http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v%3awords)を使用してみませんか? –

+0

'!!'は、4つのリストトラバーサル対1のためにパターンマッチングに比べて非効率的です – nponeccop

12

を空白文字で文字列を分割するwords機能を使用してください。その後、あなたはmap readの結果を得ることができます。

したがって、単純な実装は次のようになります。そして、

readNumbers :: String -> [Int] 
readNumbers = map read . words 

、あなたは正確に4つの数字、使用パターンマッチングが必要な場合:代わりに `分割 "の `splitWs`を" 使用しない理由

case readNumbers string of 
    [a,b,c,d] -> ... 
    _   -> error "Expected four numbers" 
関連する問題