如何在模式匹配构造内部的 SML 中制作块

How to make a block in SML inside of pattern matching construction

我是 SML 的初学者,它的语法对我来说仍然不是很友好(我是 C# 程序员)。所以这个问题在你看来可能很愚蠢。 因此,我有一个带有模式匹配(例如阶乘)的递归函数,我将对其进行调试,但我不知道如何将 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);

提前致谢

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

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

请注意,没有必要在 x 周围加上括号,只是为了在其上调用函数。