Sml 标准ML中的elseif语句?
我正在做一个家庭作业,让一个函数sumOdd计算前n个奇数整数的和,但我似乎找不到任何类型的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可以修复错误 此外,以下格式的函数
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
既不是变量,也不是声明。当我说“一切”时,它是在一个可以是陈述的上下文中。当然还有其他各种语法类别,如声明、类型、模块等。