标准ML中的elseif语句?

时间:2012-01-29 20:48:53

标签: sml smlnj

我正在做一个功课问题,使函数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);

2 个答案:

答案 0 :(得分:12)

您的函数未编译,因为elseif不是SML中的关键字。将上一个elseif更改为else,将其他elseif更改为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)

答案 1 :(得分: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)时给予if isinstance(item, list): ...