【发布时间】:2023-11-03 05:46:01
【问题描述】:
我不太明白以下函数背后的逻辑。此函数用于汇总列表中的数字。但是导师并没有过多地讲述::在这里做了什么。
教程中的原始列表在列表中有 5 个数字/项目 (1,3,5,7,9)。我以为导师先用五个字母(a,r,e,s,t)命名这些项目,但功能仍然适用于项目多于或少于 5 个的列表。那怎么会呢?
- fun sum([]) = 0 | sum(a::rest)= a + sum(rest);
据我所知,a rest 不是特定于语言的命令。它们必须是用户定义的。
我在 SML 文档中找到了以下信息,但对于掌握 :: 概念仍然没有任何意义。
datatype 'a list = nil | :: of 'a * 'a list
【问题讨论】:
-
使用
::您只是将列表(提前)分解为第一个元素(在您的情况下为a)和一个尾部(或rest):a和@ 987654331@ 只是变量,您可以随意命名它们。 -
@barti_ddu 知道了!根据上面的列表,这一定是这样的:当a=1时,rest=3,从现在开始的新“a”是1+3=4。那么a=4,rest=5,从现在开始新的“a”就是4+5=9..以此类推。
-
不完全是:
tail是分解后列表的剩余部分(列表减去第一个元素),即第一次迭代后的[3; 5; 7; 9],第二次迭代后的[5; 7; 9],依此类推开。