2016-12-07 6 views
1

문장에서 특정 단어를 셀 수있는 몇 가지 함수를 작성하기 시작했지만 지금은 목록의 단어 길이를 계산해야합니다. 그래서 각 요소가 하나의 단어이고이 단어의 문자를 세고 싶은 목록이 있습니다. 하스켈은 루프를 사용하지 않기 때문에 어떤 해결책을 찾지 못했습니다. 이 작업을 수행 할 여지가 있습니까?하스켈에서 단어의 길이를 가져 오는 것

+0

당신은 당신이 쇼 코드에 의해 더 나은이 질문을 만들 수 있습니다 이미 마쳤어. 또한 haskell 질문에 당신의 욕망 출력의 유형 서명을 포함하는 데 도움이됩니다. – wizzup

답변

2

하스켈에서 작업 할 때 루프가 필요하다고 생각되면 아마도 재귀를 고려하고있을 것입니다. 문자열 목록을 통해 반복하여 각각에 length 함수를 적용하려고합니다. 함수가 (당신이 하스켈을 통해 작업 할 때 매우 익숙해지는 것) 각각의 값에 적용되는 목록을 재귀의 일반적인 패턴은 다음과 같이 대략 같습니다

func f []  = [] 
func f (x:xs) = f x : func f xs 

그래서 우리는 문제를 해결할 수있는 방법 (기능을 전문으로하기보다는 인수로 받아들이는) :이 동작은 아주 일반적이기 때문에

wordLengths :: [String] -> [Int] 
wordLengths []  = [] 
wordLengths (x:xs) = length x : wordLengths xs 

그러나, 우리를 위해이 모든을 담당하는 기능 map이 존재한다. 형식 서명은 (a -> b) -> [a] -> [b]이므로 함수 (length)와 목록 (String)을 전달해야합니다. 우리는 문자열 목록에 각 값에 length 기능을 map 경우에, 우리는 원하는 결과를 얻을 수 있습니다 :

wordLengths :: [String] -> [Int] 
wordLengths = map length 

사용 예제 :

ghci>> wordLengths ["abc","defg"] 
[3,4] 
+0

처음에는 아주 좋은 설명에 감사드립니다! 그러나 그것을 사용하려고 할 때, 나는 단지'변수가 아닙니다 : wordLengths :: [String] -> [Int]' –

+0

변수를'ghci'에 직접 입력하려고한다고 가정합니다. 포함 된 함수 정의는 Haskell 소스 파일을 사용하기위한 것입니다. 확장자가'.hs' 인 파일에 붙여 넣은 다음 터미널에'ghci fileName.hs '를 통해로드 할 수 있습니다. – mnoronha

+0

나는 그것이 내가 한 것이라고 생각한다. 나는 * .hs 파일을 썼다. 그래서 나는 Haskell 자체의 일부 소스 파일을 "수정"해야만합니까? 전체 HA.hs 파일을 추가했습니다. –

관련 문제