【发布时间】:2021-03-11 18:11:14
【问题描述】:
我要一个数据学生和一个类型类:
data Student = Student {nome :: String
, stdNumber :: Int
, approvedClass :: Int
, failedClass :: Int
}
type Class = [Student]
我正在尝试将更多批准的学生添加到所有学生中,但我不知道该怎么做。我已经有了这个:
getStudent :: Class-> String -> Maybe Student
getStudent [] _ = Nothing
getStudent (student:xs) s
| name student == s = Just student
| otherwise = getStudent xs s
addClasses :: Student-> Int -> Int -> Student
addClasses student aC fC =
student { approvedClass = approvedClass student + aC
, failedClass = failedClass student + fC
}
addClassesToAllStd :: Class-> [(String, Int, Int)] -> Class
addClassesToAllStd cl [] = cl
addClassesToAllStd [] _ = []
addClassesToAllStd ((Student name _ approvedClass failedClass):xs) ((n,aC,fC):ys) = [(Student _ _ approvedClass+aC failedClas+fC)] ++ addClassesToAllStd xs ys
但我不知道如何检查我是否添加到正确的学生?而且我不明白为什么这不起作用(即使没有检查我是否添加到正确的学生)?
这是一个应该如何工作的示例:
>french1 = addClassesToAllStd french [("Emma",5,1),
("Max",3,3), ("Carol",4,2)]
> carol = getStudent french1 "Carol"
> approvedClass carol
4
> failedClass carol
4
> max = getStudent french "Max"
> approvedClass max
3
> failedClass max
3
法语是french = [("Emma",0,0),("Max",0,0), ("Carol",0,0)]
【问题讨论】:
-
你怎么知道它不起作用?