2011-03-22 51 views
1

这绝对让我疯狂。我能想象的最简单的事情,我无法做到。factorial函数输入int,输出实数?

我只是想计算机阶乘输入一个int并输出一个实数。

我试过以各种方式胁迫。

fun factorial 0 = 1 | 
    factorial n = n * factorial(n-1); 

回答

3

为int转换为真实的,你用Real.fromInt。如果你想退货,你应该返回1.0而不是1作为基本情况。所以,你的代码就变成了:

fun factorial 0 = 1.0 
    | factorial n = (Real.fromInt n) * factorial(n-1); 
+0

你是FREAKIN人!!!!!!我一直试图n:真正的或真实的(n),同时也使用1.0。现在我的因子辅助函数对我的其余功能正常工作... – DJPlayer 2011-03-22 01:40:51

1

在数学上,n! =(n-1)! * n。除非我误解事物(这是可能的;我不知道ML),否则你的函数总是返回1,因为它永远不会乘以n。

fun factorial 0 = 1 | 
    factorial n = n * factorial(n-1); 

我不知道你是怎么返回一个真正的,而不是一个int,或该代码是否即使这样做,但它至少应该给你一个正确的值。

+0

这也是值得一提的尾随分号是多余的。 – diapir 2011-03-22 01:15:59

+0

对我来说只是一个错误。我至少用int - > int来正确编码,你需要知道ML才能正确地强制实现。 – DJPlayer 2011-03-22 01:27:04

+0

我用的;只是出于习惯..我知道这是不需要的,但我只是为了视觉上的组织。 – DJPlayer 2011-03-22 01:32:11