【发布时间】:2018-10-07 12:22:19
【问题描述】:
我有一个元组列表(日:月),想找出天数最多的月份。
我创建了一个函数,它接受我的元组列表和月份列表(或仅 1 个)来检查并返回指定期间一个月内的最大日期数
maxweekends x [] = 0
maxweekends x [n] = length (filter ((==n).snd) x)
maxweekends x (y:ys) = max (maxweekends x [y]) (maxweekends x ys)
然后我写了一些简单的函数来使用它,但由于“无法构造无限类型”错误而无法编译它。我已经花了几个小时来处理这个错误,但我就是不明白出了什么问题。
func x [] = 0
func x (y:ys)
| maxweekends x y < maxweekends x ys = func x ys
| otherwise = y
理论上它应该调用自己,直到没有日期数量更大的月份,然后才返回答案。
谢谢。
【问题讨论】:
-
发布完整回溯?
-
作为一般建议,与其让 GHC 为您推断类型,然后报告不一致,通常最好用显式类型注释顶级绑定。这样,当推断的类型与预期的类型不匹配时,会尽早引发类型错误,这样更容易修复。事实上,大多数 Haskeller 都是从编写函数类型开始编写函数的。
标签: haskell