2011-11-13 8 views
8

문자열에 공백으로 구분 된 4 개의 문자열을 받아들이고 분리하여 정수로 변환하는 함수를 작성하려고합니다. 그들을 4 개의 개별 정수 변수에 배치하십시오. 나는 개별 요소에 액세스 할 수 !!를 사용하여 문자열 배열로 분할 splitWs을 사용할 수 있습니다 알고, 다음과 같은 것을는 정수로 변환 :문자열에서 공백으로 구분 된 숫자의 문자열을 정수로 변환하고 변수에 넣으십시오.

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

을하지만, 나는 그것을 넣어하는 방법을 알아낼 수 없습니다 모두 함께.

답변

0

하스켈에는 변수가 없으며, 하스켈에서는 문자열이리스트로 표시됩니다. 그래서

는 시도 : 공백으로 문자열을 분할

> nums(!!)0 
1 

HTH 크리스

+0

이유는'사용하지 splitWs' 대신'분할 ""의 '? – nimi

+5

왜 [^ words'] (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v%3awords)를 사용하지 않으시겠습니까? –

+0

'!!'는 4 개의 목록 순회 대 1 때문에 패턴 매칭에 비해 비효율적입니다 – nponeccop

12

사용 words 기능 :

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

당신은 (!)가있는 하나의 요소에 액세스 할 수 있습니다. 그렇다면 결과는 map read입니다.

따라서, 간단한 구현은 다음과 같습니다

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

을 그리고, 정확히 네 개의 숫자를 사용 패턴 매칭을 필요로하는 경우 :

case readNumbers string of 
    [a,b,c,d] -> ... 
    _   -> error "Expected four numbers" 
관련 문제