如何在模式匹配构造中在SML中创建一个块

时间:2015-02-10 02:26:48

标签: sml

我是SML的初学者,但它的语法对我来说还不是很友好(我是C#程序员)。所以这个问题在你看来可能是愚蠢的。 所以,我有一个带有模式匹配的递归函数(例如factorial),我将调试它,我无法得到如何将print(Int.toString(x))添加到第二种情况。在类C语言中它是:

function fact(x) {
  if (x == 0) {
    return 1;
  }
  print(x);
  return x*fact(x-1);
}

如何将print添加到SML版本,第二种情况?

fun fact 0 = 1
  | fact x = x*fact(x-1);

提前谢谢

1 个答案:

答案 0 :(得分:1)

您需要在块周围加上括号,并使用分号分隔其中的各个表达式:

fun fact 0 = 1
  | fact x = (print (Int.toString x);
              x * fact (x-1));

请注意,不需要在x周围添加括号来调用它上面的函数。