получить кортеж и оперировать с n-м элементом (-ами) - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть определенный тип и элементы этого типа.У этих элементов есть кортежи, и мне нужно взять 3 предмета из этих кортежей и получить среднее значение по ним.

type Name = String
type Subject = String
type Grade = Float

-- Definition of a type
type Student = (Name, Subject, Grade, Grade, Grade)

-- Elements of this type
student :: Int -> Student
student 1 = ("Rafael", "INE5416", 6.0, 5.0, 8.0)

-- now i need a function that can receive an Int as student ID, get this
-- student by ID and calculate her average grade.
getAverage :: Int -> Float
getAverage student x =  ((_, _, c, d, e) / 3) -- Int is to get x student

main = do
  print (getAverage(1)) -- passing student ID--

1 Ответ

4 голосов
/ 09 апреля 2019

Вы можете сопоставить шаблон по результату вызова student с указанным идентификационным номером, а затем получить среднее значение терминов, которые вас интересуют.

getAverage :: Int -> Float
getAverage studentId = (a + b + c) / 3
  where (_, _, a, b, c) = student studentId

Опасность заключается в том, что studentфункция не полнаяОценка student 2 в настоящее время приведет к сбою программы.

...