2014-11-29 1 views
1

저는 프로그래머를 시작하고 처음 몇 가지 프로그래밍 클래스를 가지고 있습니다. 이 함수는 Haskell을 사용하여 함수형 프로그래밍을 시작했습니다. 나는 이미 몇 가지 과제를 완료했지만, 한 지점에 머물러있어 도움이되기를 희망하고 있었다.목록을 좌표 집합으로 바꾸기 [Haskell]

전체 코드를 지루하게하지 않기 위해, 지금 내 프로그램은 텍스트 파일에서 명령 목록을 추출하고 있습니다. 이 목록을 일련의 좌표로 변환해야합니다. 무엇을 의미하는 라인을 따라 무언가 :

function :: [String] -> (Int, Int, Char) 

함수 수신처 경우, 예를 들어,리스트 [ "0 0 N"] 출력 좌표 및 방향 (0, 0, N). 그냥 정수라면

function [x y o] = (show x, show y, read o) 

가 작동 것이다 :

나는 일을 시도했다. 나는 Char 부분을 작동시키는 것처럼 보이지 않습니다. 그런 멍청한 질문이라면 나는 사과하지만, 나와 함께 감싸 주시오, 제발, 저는이 모든 것에 정말로 새로운 것입니다.

감사합니다.

+2

모든 부품을 읽으려고 했습니까? :)'show'는'read'의 ** 대응 **입니다. 당신이 원하는 것은 기본적으로 문자열을 파싱하는 것입니다. 이미 토큰 화 된 경우,'f [x, y, o] = (read x, y, read o)'가 트릭을 수행해야합니다. (쉼표에주의하십시오) –

+0

입력 내용이'String' 또는 단일'String' ='Char's 목록입니까? –

+0

'infRobot [x, y, o] = (read x, read y, read o)'레이아웃을 사용하여 파트를 읽었습니다. 그러나 ghci에서 함수를 사용할 때 다음과 같은 결과가 나옵니다. 'infRobot [ "0 0 S"] *** 예외 : tarefa2teste.hs : 19 : 1-43 : 함수의 비 한정적인 패턴 infRobot' – Vux

답변

2

특정 테스트 케이스를 들어이 작동합니다 :

function [(x:' ':y:' ':o:_)] = (read [x], read [y], o) 

당신의 문자열이 당신이 그런 식으로 작업을 수행하려는 경우 당신은뿐만 아니라 그들에 일치 할 필요는 공백이 포함 된 경우.

하지만 실제로 원하는 것은 아닙니다. ["12 23 S"] 또는 ["3 5 W", "2 8 E"]과 같은 입력에서는 깨질 수 있습니다.

입력 내용이 실제로 서명과 같은 문자열 목록이라면 아마도 하나의 문자열을 다루는 함수와 다른 함수를 목록의 모든 문자열에 적용하는 함수 등 두 가지 함수를 작성해야한다고 말합니다. mapwords 함수를보고 문제를 해결하는 방법을 생각해보십시오.

+0

아, 공백은 목록의 일부이기도합니다. 처음 부분에 대해 대단히 감사합니다. 두 번째로, 나는 당신이 의미하는 것을 보았다고 생각합니다. [ "12 23 S"]의 경우 x는 12가 아니지만 1은 맞습니까? 나는 이것을 고려하지 않았지만 당신 말이 맞습니다. 그래서 입력은 실제로'function [(x : xs) : '': (y : ys) : '': o : _)'입니까? – Vux

+1

아닙니다. 이 패턴은 (x : xs)가 전체 List/String에서 일치하고 Chars List에 String을 가질 수 없기 때문에 작동하지 않습니다. 정말로, 단어'함수'를 보라. –

+0

나는 함수를 작동 시키도록 관리 해왔다. 나는 어떻게 대답을 얻는지를 알 수 없기 때문에'map' 함수를 사용하지 않았지만 아마 내 코드를 훨씬 더 우아하게 만들었을 것입니다. 입력이 항상 두 개의 숫자와 문자로 이루어질 것이라는 것을 고려해 볼 때, 나는'words' 함수를 사용하여 결과 목록의 머리와 꼬리를 가지고 놀았습니다. 관계없이 당신의 도움에 감사드립니다, 그것 없이는이 문제를 해결하지 못했을 것입니다 :). – Vux

관련 문제