链式 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);