2016-09-19 2 views
1

totnChars entry = myLoop (answers entry)(answers entry)을 어떻게 사용하고 있는지 궁금합니다. 입력 항목이 answers이어야 함을 의미합니까? 그러나 Entrytentry 유형이 아닙니까?하스켈 함수 이해하기

type Question = [Char] 
type Answer = [Char] 
type Music = [Char] 
data Entryt = MyEntry { 
         questions :: [Question], 
         answers :: [Answer], 
         music :: Music, 
         time :: Float 
         } deriving (Show, Eq) 



totnChars :: Entryt -> Int 
totnChars entry = myLoop (answers entry) 

myLoop :: [Answer] -> Int 
myLoop [] = 0 
myLoop (x:rest) = (nChars x 0) + (myLoop rest) 
+1

'answers '의 타입은'Entryt -> [Answer]'입니다. – pyon

+0

명시 적으로 작성 (답변 입력)하여 얻는 것은 무엇입니까? – DoubleOseven

답변

5

answers은 주어진 항목 응답 목록을 검색하는 getter 함수이므로 totnChars entry = myLoop (answers entry)은 항목을 취하는 함수를 정의하고 myLoop을 해당 항목의 대답 목록에 적용합니다.

입력 항목이 답변이어야한다는 의미입니까?

아니요. 특정 유형이어야한다는 문구는 expression :: Type이지만 answers은 형식이 아닙니다. 타입 이름은 항상 하스켈에서 대문자로 시작합니다. 유형 answers이라는 변수를 도입 할 수는 있지만 그다지 의미가 없습니다. 그리고 그것은 여기서 일어나는 일이 절대적으로 아닙니다. answers entry은 단순한 오래된 함수 응용 프로그램입니다.

그러나 Entryt 유형의 항목이 아닙니까?

예, 그렇습니다.

3

answers에는 [Answer] 유형이 없습니다. 형식은 Entryt -> [Answer]입니다.

"하지만 왜?"요청할 수 있습니다.

Entryt에는 고유 한 답변 목록이 있으며, Entryt에 따라 달라질 수 있습니다. 따라서 answersEntryt을 사용하고 응답 목록을 반환하는 함수입니다.