2014-12-30 8 views
1

기본적으로 나는 캐릭터가 포함 된 단어를 검색하고 해당 문자가있는 단어의 수를 계산하려고합니다. 단어 하나에 문자가 포함되어 있는지 확인하는 방법이 있는지 궁금합니다.포함 하스켈 상당

는 이 코드는 지금까지 다음과됩니다

같이

let w = "Hello i'm kind of new to Haskell, but so far it's great!" 
length $ filter (== 'n') w 

이이 편지에 어떤 발생을 얻는다 N 불구하고 하나 개의 단어에 2 N의이 있다면이 2로가 아닌 한, 기본적으로 내가 원하는 계산 것 단어에 문자 입력이 포함되어 있는지 확인한 다음 길이를 가져옵니다. 하스켈에 대한 유형에 따라 함수를 검색하는 검색 엔진이 실제로있다, 당신은 그것을 전에 보지 못한 경우 향후 참조를 위해

> 'n' `elem` w 
True 

:

감사

+0

https://www.haskell.org/hoogle/에서 'elem'을보고 '단어'를 찾으십시오. – AndrewC

+0

@Marcin Ah - 나는 내가 말한 것을 분명히하기 위해 내 의견을 편집했습니다. 미안합니다. 해명 해 줘서 고마워, bheklilr. – AndrewC

+0

아 멋지다, 이것은 완벽한 감사합니다 얘들 아! – Jordan

답변

8

당신은 elem을 사용할 수 있습니다 . Char -> String -> Bool 또는 String -> Char -> Boolhoogle에서 검색하면 elem이 두 번째 결과입니다. 이것은 존재하지 않았던 기능을 발견하기위한 매우 강력한 도구가 될 수 있습니다.


조금 더 가까이 질문을 읽고 당신이 원하는 것을 정확히 깨닫고, 당신은 words, elem, 그리고 아주 쉽게 filter 특정 문자가 포함 된 문자열에서 단어의 수를 계산하기 위해 결합 할 수 있습니다 :

wordsWithLetter :: Char -> String -> Int 
wordsWithLetter c w 
    = length 
    $ filter (c `elem`) 
    $ words w 

여기 filter (c `elem`)c 그렇게 length가 많은 단어가 그 편지를 포함하는 방법을 알려줍니다 사용하여 나머지 단어를 계산 포함되지 않은 모든 단어를 제거합니다.

+0

고마워, 나는 구글에 대해 몰랐다. 또한 아마도 저의 가난한 질문 이었을지 모르지만 true 또는 false를 반환하지 않는 횟수를 계산하는 코드가 필요했습니다. 이 필터로 사용할 수 있습니까? 그래서 'n'요소를 가지고있는 모든 단어를 찾아서 – Jordan

+0

@Jordan으로 계산합니다. 발생 횟수를 계산하려면'length $ filter (== 'n') w'가 잘 작동합니다. 내가 어떻게 문제를 해결할 수있을 것인가. 그러나 문자열에있는 모든 문자의 수를 계산하려면 문자열을 반복 할 때'Data.Map'을 사용하고'Map Char Int' 유형의 값을 만드는 것이 좋습니다. 좀 더 복잡하기 때문에 그렇게하고 싶다면 별도의 질문을하는 것이 좋습니다. – bheklilr

+0

@Jordan 귀하의 의견을 귀하의 의견과 조금 더 가까운 내용을 읽은 후에 제 편집을보십시오. – bheklilr