2012-01-16 3 views

답변

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을 단일 요소 목록으로 변환해야합니다. 이것은 (:"")을 적용하여 수행 할 수 있습니다. StringChar의 목록 일뿐입니다. digitToInt라는 모듈 Data.Char에 정의 된 함수가

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

덕분에 마틴 .. 락 .. –

8

오류 처리가 연습으로 남아 있습니다. (힌트 : 당신은 다른 반환 형식이 필요합니다.)

+0

q2 = .. 아닙니다 q2 :: – aelguindy

+0

고맙습니다. @aelguindy. – 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] 

두 번째 예제와 그렇게 할 수 digitToInt보다 읽기 ()는 표현의 유형에 의존하지 않기 때문에 읽기가 어렵습니다. (까닭에이 게시물 = P를 찾는 방법입니다). 어쨌든, 나는 잘못 입력했기 때문에 haskell을 처음 사용합니다.).

0

당신은 사용할 수 있습니다

> [read [x] :: Int | x <- string] 
관련 문제