가장 많이 사용되는 단어와 나타나는 횟수를 반환하는 상호 작용을 사용하여 Haskell 프로그램을 만들려고합니다. 나는 정렬을 사용한 예를 보았지만 모든 단어의 개수를 알 필요는 없으며 가장 많이 반복되는 단어 만 필요합니다. 지금까지 :
import Data.List -- (sort)
import Data.Char -- (isAlpha, toLower)
import Data.Ord -- (maximumBy)
main =
interact
$ unwords
-- comment: here show the size of the list and the word (probably head)
. maximumBy(comparing length)
. group
. sort
. words
. map (\char -> if isAlpha char then toLower char else ' ')
위의 컴파일됩니다. maximumBy
다음과 같이 가장 많이 사용되는 단어를 제공합니다.
[the, the, the, the, the, the, the, the...]
단어 "the"
가 텍스트에 나타나는 횟수 ; "the"
내가 제공 한 텍스트에 가장 많이 사용되는 단어 임을 확인했습니다 .
출력하고 싶은 것은 다음과 같습니다. "the, 318"
나는 첫 글자 "t"와 3만을주는 다음을 시도했다 :
import Data.List -- sort
import Data.Char -- isAlpha, toLower
import Data.Ord -- maximumBy
main =
interact
$ unwords
. map (\(n, w) -> show n ++ ", " ++ show w)
. map (\s -> (length s, head s))
. maximumBy(comparing length)
. group
. sort
. words
. map (\char -> if isAlpha char then toLower char else ' ')
출력을 제공합니다.
"3, 't' 3, 't' 3, 't' 3, 't' ..."
아무도 내가 뭘 잘못하고 있는지 알아?
map
의 map (\s -> (length s, head s))
함수가 수단 \s -> (length s, head s)
각각에 적용되는 "the"
대신리스트의 "the"
반복적 길이의 첫 번째 문자를주는 집 "the"
. 따라서 제거하면 map
더 잘 작동합니다. 또한 마지막 두 단계를 수정해야합니다 ( unwords
및 제거 map
).
$ (\(n, w) -> show n ++ ", " ++ show w)
. (\s -> (length s, head s))
. maximumBy(comparing length)
더 효율적으로 파이프 라인에서 최대 값보다 map (\s -> (length s, head s))
더 일찍 신청할 수 있습니다.
length
최대 함수가 수행하는 각 비교에서 다시 계산하지 마십시오.maximum
대신 일반 사용하십시오 maximumBy
. ( 똑같이 빈번한 단어가 두 개 있으면 실제 문자열을 비교하기 때문에 어떤 단어가 선택되는지는 약간 다를 수 있습니다.)즉, 다음을 사용할 수 있습니다.
$ (\(n, w) -> show n ++ ", " ++ show w)
. maximum
. map (\s -> (length s, head s))
또는 모두 합치려면 :
import Data.List (group, sort)
import Data.Char (isAlpha, toLower)
main =
interact
$ (\(n, w) -> show n ++ ", " ++ show w)
. maximum
. map (\s -> (length s, head s))
. group
. sort
. words
. map (\char -> if isAlpha char then toLower char else ' ')
import
가져 오는 항목의 이름을 명시 적으로 지정하기 위해 공식 구문을 사용 하도록 명령문을 변경 한 방법도 참고하십시오 . 실제로 group
놓친 함수 하나 ( maximumBy
)와 잘못된 모듈로 나열한 하나 ( )를 가리키는 오류 메시지가 표시 되었기 때문에 주석을 사용하는 것이 좋습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다