4

我正在做一个家庭作业问题来制作一个函数 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);
4

2 回答 2

13

您的函数未编译,因为elseif它不是 SML 中的关键字。将 last elseiftoelse和 other elseifto更改为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)
于 2012-01-29T20:55:55.120 回答
0

您还可以通过将基本情况与一般情况分开来消除对 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)

于 2016-05-26T01:54:33.317 回答