链式 if 语句的替换
Replacement for chained if-statements
我是 SML 的新手,我正处于可以编写功能代码的地步,但我不确定是否有更合适或更惯用的方式来做事。 SML 只允许在模式中使用值构造函数,因此 case 语句在下面不起作用。 SML 也不允许多个 else-if 语句。
以下有效,但有一个丑陋的三重嵌套 for 循环。下面的代码有没有更地道的写法?
datatype coins = penny | nickle | dime | quarter;
fun valueToCoins 0 = nil
| valueToCoins x =
if x >= 25
then quarter::valueToCoins(x-25)
else
if x >= 10
then dime::valueToCoins(x-10)
else
if x >= 5
then nickle::valueToCoins(x-5)
else penny::valueToCoins(x-1);
评论已经解决了这个问题,但实际上您做对了。你只需要正确格式化它,它看起来合理。
datatype coins = penny | nickle | dime | quarter;
fun valueToCoins 0 = nil
| valueToCoins x =
if x >= 25 then
quarter :: valueToCoins(x - 25)
else if x >= 10 then
dime :: valueToCoins(x - 10)
else if x >= 5 then
nickle :: valueToCoins(x - 5)
else
penny :: valueToCoins(x - 1);
我是 SML 的新手,我正处于可以编写功能代码的地步,但我不确定是否有更合适或更惯用的方式来做事。 SML 只允许在模式中使用值构造函数,因此 case 语句在下面不起作用。 SML 也不允许多个 else-if 语句。
以下有效,但有一个丑陋的三重嵌套 for 循环。下面的代码有没有更地道的写法?
datatype coins = penny | nickle | dime | quarter;
fun valueToCoins 0 = nil
| valueToCoins x =
if x >= 25
then quarter::valueToCoins(x-25)
else
if x >= 10
then dime::valueToCoins(x-10)
else
if x >= 5
then nickle::valueToCoins(x-5)
else penny::valueToCoins(x-1);
评论已经解决了这个问题,但实际上您做对了。你只需要正确格式化它,它看起来合理。
datatype coins = penny | nickle | dime | quarter;
fun valueToCoins 0 = nil
| valueToCoins x =
if x >= 25 then
quarter :: valueToCoins(x - 25)
else if x >= 10 then
dime :: valueToCoins(x - 10)
else if x >= 5 then
nickle :: valueToCoins(x - 5)
else
penny :: valueToCoins(x - 1);