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

SML中如何对比查找列表内元组元素并统计匹配次数

问题修复方案

错误原因

  • 函数参数定义与调用不匹配:你定义的number_in_months需要4个入参,但实际调用仅传入2个参数,直接触发类型不匹配报错,多余的months2、months3参数无实际作用可删除
  • 无遍历逻辑:当前代码仅比对了第二个元组的第二个元素和搜索列表第一个元素,未实现全量元组遍历、全量搜索值匹配的需求
  • 缺少存在性校验逻辑:没有通用的「判断元素是否在列表中」的实现,无法完成多值匹配校验

可运行实现代码

(* 辅助工具:判断指定int值是否存在于目标列表中 *)
fun is_in (target : int, check_list : int list) =
  if null check_list
  then false
  else if hd check_list = target
       then true
       else is_in(target, tl check_list)

(* 核心函数:统计所有符合月份匹配要求的元组总数 *)
fun number_in_months(dates : (int * int * int) list, searchingElements : int list) =
  if null dates
  then 0
  else
    let
      val current_month = #2 (hd dates)
      val add_count = if is_in(current_month, searchingElements) then 1 else 0
    in
      add_count + number_in_months(tl dates, searchingElements)
    end

(* 测试用例,运行后返回值为true代表逻辑正确 *)
val test3 = number_in_months ([(2012, 2, 28), (2013, 12, 1), (2011, 3, 31), (2011, 4, 28)], [2, 3, 4]) = 3

实现说明

  • 采用递归实现列表遍历,不需要额外引入循环语法,符合Standard ML的函数式编码习惯
  • 边界条件做了兜底:日期列表为空时直接返回0,避免空列表执行hd/tl操作触发运行时错误
  • 测试用例运行后test3的取值为true,符合预期要求

内容的提问来源于stack exchange,提问作者Mostafa Ezzat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:09:01