하스켈 프로그래밍의 첫 번째 원칙 책에는 공백이있는 문자열을 입력하고 공백으로 분할 한 다음 비 공백 청크를 문자열 목록에로드하는 함수를 작성하는 방법이 나와 있습니다. 내 첫 번째 시도했다 :
splitString :: String -> [String]
splitString str
| str == "" = []
| otherwise = takeWhile (/=' ') str : splitString $ drop 1 $ dropWhile (/=' ') str
지금이 컴파일되지 않습니다. 내가 대신과 같이 괄호의 대응 쌍의 첫 번째 ($) (오른쪽 splitString
후)를 교체하는 경우 :
takeWhile (/=' ') str : splitString (drop 1 $ dropWhile (/=' ') str)
을 다음 작동합니다. 지금까지 배운 내용을 바탕으로, 두 가지가 동등하지 않아야합니까? ($)는 바로 연관, 그래서이 일이되어야한다 무엇처럼 나에게 보이는
dropWhile (/=' ') str
는drop 1 (dropWhile (/=' ') str)
는- 다음, 결과는
splitString
에 전달되는 것입니다 먼저 평가이다. 대신
, 나는
Couldn't match expected type ‘[Char] -> [String]’
with actual type ‘[[Char]]’
The first argument of ($) takes one argument,
but its type ‘[[Char]]’ has none
은 내가 볼 수 있다고 ghc
에서 오류가 발생하는 것을 "($)의 첫 번째 인수"하여 약 splitString
을 얘기,하지만 난 어떤 진술에 의해 의아해 해요
but its type `[[Char]]` has none
을 의미합니다.
당신이 바로, 'words'을 구현 알고 있습니까? – chepner
@chepner : no ... 나는 그것을 몰랐다. 저는 하스켈에게 총 초보자입니다. 나는 그것이 어떻게 작동하는지 알고 싶다. – gogurt
왜 downvote?누구나 항상'$ '연산자를 괄호로 묶는 것과 같은 것으로 설명하지만,이 경우에는 분명하지 않습니다. 그리고 그 이유를 이해하는 것이 중요하다고 느꼈습니다. – gogurt