Sim*_*got 33 haskell factorial
我知道这听起来像一个愚蠢的问题,但这里是:Haskell中是否有内置因子?
Google给了我关于Haskell的教程,解释了我如何自己实现它,而且我在Hoogle上找不到任何东西.我不想每次需要时都重写它.
我可以product [1..n]用作替代品,但是有一个真正的Int -> Int阶乘内置函数吗?
ham*_*mar 49
尽管它通常用于示例,但是因子函数在实践中并非全部有用.数字增长非常快,包括因子函数在内的大多数问题都可以(并且应该)以更有效的方式计算.
一个简单的例子是计算二项式系数.虽然可以将它们定义为
choose n k = factorial n `div` (factorial k * factorial (n-k))
Run Code Online (Sandbox Code Playgroud)
不使用阶乘更有效率:
choose n 0 = 1
choose 0 k = 0
choose n k = choose (n-1) (k-1) * n `div` k
Run Code Online (Sandbox Code Playgroud)
所以,不,它不包含在标准前奏中.Fibonacci序列,Ackermann函数或许多其他函数虽然在理论上很有用但在实践中并不常用,以保证标准库中的位置.
小智 6
我在Hackage中知道的最好的factorial实现是Math.Combinatorics.Exact.Factorial.factorial在exact-combinatorics包中.它使用渐近更快的算法product [1..n].
http://hackage.haskell.org/package/exact-combinatorics
不,但你可以轻松写一个.如果您担心每次需要时都必须重写该功能,您可以随时将其作为模块或库的一部分进行编写(取决于您想要使用它的距离,以及您拥有的其他类似功能).这样你只需要编写一次,并且可以在需要时快速将其拉入任何其他项目.