【问题标题】:number_in_month exercise (Error in SML function to build a list of integers from a list of tuples)number_in_month 练习(SML 函数从元组列表构建整数列表时出错)
【发布时间】:2020-06-09 15:20:15
【问题描述】:
val test1 = [(1,5,3),(3,5,2),(3,4,5)]

fun number_in_month dates_and_month  =
    case dates_and_month of
        (x,y,z)::xs' => y :: number_in_month xs'           

当我在 REPL 中使用 test1 运行时,此代码会产生以下错误:

未捕获的异常匹配 [非详尽匹配失败] 提出于:hw1pm.sml:28.49

有什么线索吗?

【问题讨论】:

    标签: tuples pattern-matching sml smlnj


    【解决方案1】:

    当列表为空时它不知道该怎么做。

    工作代码:

    fun number_in_month dates_and_month  =
        case dates_and_month of
            [] => []
            | (x,y,z)::xs' => y :: number_in_month xs'    
    

    【讨论】:

      【解决方案2】:

      编辑:我试图让这个答案更有帮助,同时保留这可能是 StackOverflow 上被问得最多的 SML 问题的观察结果。这个问题被问到的总次数列表:1st2nd3rd4th5th6th7th8th9th、@987653 、11th12th13th14th15th16th(不包括这篇文章)。

      这里不是再次回答这个问题,而是精选版本:

      • 1st2nd6th12th 与递归和无限递归作斗争。一些尝试包括使用函数null,而其他尝试包括模式匹配。我会接受使用模式匹配的建议。
      • 3rd4th5th7th13th14th 提供了很多对该函数一般结构的洞察。通过阅读这些答案,您可能会学到比您所要求的更多的东西,而且由于它们涵盖了您正在积极使用的功能的上下文中的许多基本主题,因此这可能非常值得。
      • 10th 处理使用可变引用,因此请远离该引用,除非您即将犯同样的错误!
      • 11th 实际上并没有问什么,但作者说他们有这个练习,然后就停在他们的轨道上。这里有一个教训,我不会想办法解决的。
      • 8th9th15th16th 似乎可以解决语法错误。

      在此答案之后就此事提出的问题:17th(缺少else)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-05
        • 1970-01-01
        相关资源
        最近更新 更多