You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助实现number_in_months函数:统计匹配指定月份列表的日期数

问题分析与解决方案

你的代码抛出uncaught exception EMPTY的直接原因是未处理月份列表为空的边界情况,同时递归逻辑的方向有误——你不需要逐个日期和单个月份匹配,应该复用已经实现并测试通过的number_in_month函数来拆分问题。

核心实现思路

number_in_months的需求是统计日期列表中属于任意指定月份的总数量,我们可以把这个问题拆解为:

  1. 如果月份列表为空,直接返回0(没有需要统计的月份)
  2. 如果月份列表非空,先调用number_in_month统计当前第一个月份对应的日期数量,再递归处理剩余的月份列表,将两次结果相加即可。

正确代码实现

fun number_in_months (dates : (int * int * int) list, months : int list) =
    if null months
    then 0
    else number_in_month(dates, hd months) + number_in_months(dates, tl months)

为什么你的原有代码会出错

你之前的逻辑只聚焦于日期列表的头部与月份列表的头部匹配,既没有处理“当前月份的所有日期检查完后切换到下一个月份”的场景,更关键的是完全忽略了月份列表被遍历完毕(为空)的情况——此时调用hd months就会触发EMPTY异常。

测试案例验证

用以下测试代码验证功能:

val test3 = number_in_months ([(2012,2,28),(2013,12,1),(2011,2,1)], [2,12]) = 3

运行后结果应为true,符合预期。

内容的提问来源于stack exchange,提问作者Mr. TAO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:35:19