首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未明异常空homework1

未明异常空homework1
EN

Stack Overflow用户
提问于 2022-03-18 06:05:14
回答 1查看 72关注 0票数 1

问题:编写一个函数number_before_reaching_sum,它接受一个名为sum的整数,您可以假设它是正的,而一个int列表包含所有的正数,并返回一个int。您应该返回一个int n,以便列表的前n个元素加到小于sum,而列表的第一个n+1元素添加到sum或更多。假设整个列表的总和大于传递的值;如果不是这样的话,异常就会发生。

我从SML上辞职了,也找不出这个简单的例子有什么问题。错误信息请帮助我调试下面的代码

代码语言:javascript
运行
复制
fun number_before_reaching_sum (sum:int, xl: int list) =
    if hd xl = sum
    then 0
    else
    (hd xl) + number_before_reaching_sum(sum, (tl xl))

EN

回答 1

Stack Overflow用户

发布于 2022-04-08 12:32:14

在简短的列表中尝试解决方案的几个步骤:

代码语言:javascript
运行
复制
    number_before_reaching_sum (6, [2,3,4])
--> if 2 = 6
    then 0
    else 2 + number_before_reaching_sum(6, [3,4])
--> 2 + if 3 = 6
        then 0
        else 3 + number_before_reaching_sum(6, [4])
--> ...

你很清楚地看到这是错误的--列表中的元素不应该加起来,你不能一直在每个尾巴上寻找相同的和。

您应该返回一个int,以便列表的前n个元素加到小于sum,但是列表的前n+1元素添加到sum或更多。

这意味着,如果头部大于或等于之和,则结果为0,

代码语言:javascript
运行
复制
if hd xl >= sum
then 0

否则,索引比尾部的索引多一个,而不是hd xl

另外,您要寻找的“尾和”不是原始和,而是没有hd xl的和。

代码语言:javascript
运行
复制
else 1 + number_before_reaching_sum(sum - hd xl, tl xl)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71523045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档