我正在做一个家庭作业问题来制作一个函数 sumOdd 来计算前 n 个奇数的总和,但我似乎找不到任何类型的 elseif 类型语句来这样做。我试图做的是下面但当然不起作用:
fun sumOdd n = if n=0 then 0 elseif (n mod 2)=0 then sumOdd(n-1) elseif n + sumOdd(n-1);
您的函数未编译,因为elseif
它不是 SML 中的关键字。将 last elseif
toelse
和 other elseif
to更改为else if
应该可以修复错误。
此外,该函数在以下格式中更具可读性:
fun sumOdd n = if n = 0 then 0
else if n mod 2 = 0 then sumOdd(n-1)
else n + sumOdd(n-1)
您还可以通过将基本情况与一般情况分开来消除对 else if 表达式的需求:
fun sumOdd 0 = 0
| sumOdd n = if n mod 2 = 0 then sumOdd(n-1)
else n + sumOdd(n-1)
您还应该注意,这个解决方案(和您自己的)实际上并没有将前 N 个奇数相加。它计算所有小于 N 的奇数之和。
sumOdd(5)
应该给予的9(5+3+1)
时候给予25(1+3+5+7+9)
。