2015-02-10 41 views
1

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

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

预先感谢您

+0

这已经有一段时间了,但我想你可能会用分号或逗号。试试吗? – dfeuer 2015-02-10 02:29:20

+0

分号刚刚结束第二种情况,没有'print'的地方,并用逗号将函数编译但不显示任何内容。 – myroman 2015-02-10 02:43:46

回答

1

你需要把括号内各地块并使用分号在其中的个人表达分开:

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

注意,有没有必要把周围的括号x只是为了调用一个函数。