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