Sml 标准ML中的elseif语句?

Sml 标准ML中的elseif语句?,sml,smlnj,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); 您的函数未编译,因为elseif不是SML中的关键字。将最后一个elseif更改为else,将其他elseif更改为else if可以修复错误 此外,以下格式的函数

我正在做一个家庭作业,让一个函数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中的关键字。将最后一个
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)

通过将基本情况与常规情况分开,还可以消除对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)
时,给出了
Nit:ML中没有语句,一切都是一个表达式。@andreassrossberg是
fun
不是一个语句?不能将
fun
赋值给变量(请参见示例:)。@eatonphil,
fun
既不是变量,也不是声明。当我说“一切”时,它是在一个可以是陈述的上下文中。当然还有其他各种语法类别,如声明、类型、模块等。