Construit-dans la fonction factorielle en Haskell
Je sais que cela sonne comme une question stupide, mais ici il est: Est-il intégré dans factorielle en Haskell?
Google me donne des tutoriels à propos de Haskell expliquer comment je peux la mettre en œuvre moi-même, et je ne pouvais pas trouver quoi que ce soit sur Hoogle. Je ne veux pas réécrire à chaque fois que j'en ai besoin.
Je peux utiliser product [1..n]
comme un remplacement, mais est-il vrai Int -> Int
factorielle fonction intégrée?
- Eh bien, il n'y a pas de "built-in" de l'opérateur (c'est à dire la partie de la norme prélude) pour les factorielles...
- Très peu probable. La plupart, si pas tous les gens qui ont besoin d'une fonction factorielle (dans n'importe quel langage de programmation) besoin d'un mandat ou de l'exercice, pas pour tout le travail réel. Si l'on fait cela, il suffit de coder en dur un tableau de tous les factorielle des nombres ci-dessous
maxBound :: Int
(232 ou tout au plus 264 ans) serait plus facile. - Et à l'extérieur de prélude? Je ne vois pas pourquoi factorielle ne peut être qu'un exercice. Il est utile et générique de l'opération.
- Pour rire, voir willamette.edu/~fruehr/haskell/evolution.html
Vous devez vous connecter pour publier un commentaire.
Même si elle est couramment utilisé pour les exemples, la fonction factorielle n'est pas utile dans la pratique. Les numéros de croître très rapidement, et la plupart des problèmes qui incluent la fonction factorielle peut (et doit) être calculées de manière plus efficace.
Un exemple trivial est le calcul des coefficients binomiaux. Alors qu'il est possible de les définir comme
il est beaucoup plus efficace de ne pas utiliser les factorielles:
Alors, non, il n'est pas inclus dans la norme prélude. Ni est la suite de Fibonacci, la fonction d'Ackermann, ou de nombreuses autres fonctions que bien que théoriquement intéressants ne sont pas utilisés couramment assez dans la pratique pour justifier une place dans les bibliothèques standard.
Cela étant dit, il y a de nombreuses bibliothèques de mathématiques disponibles sur le Hackage.
choose
est une fonction intégrée dans le package de Test.QuickCheck, de sorte que même si cet exemple fonctionne à chaque Test.QuickCheck n'est pas en cours d'utilisation, il est recommandé de le nommerchoose'
ou quelque chose de totalement différent.choose
, qui a été utilisé par les mathématiciens pour beaucoup plus longtemps.La meilleure mise en œuvre de factorielle je connais de Hackage est
Math.Combinatorics.Exact.Factorial.factorial
dans leexact-combinatorics
paquet. Il utilise un asymptotiquement algorithme plus rapide queproduct [1..n]
.http://hackage.haskell.org/package/exact-combinatorics
Non, mais vous pouvez facilement écrire. Si vous êtes inquiète d'avoir à réécrire la fonction à chaque fois que vous en avez besoin, vous pouvez toujours écrire en tant que partie d'un module ou d'une bibliothèque (en fonction de combien vous voulez prendre tout cela, combien d'autres fonctions similaires que vous avez). De cette façon, vous avez seulement besoin de l'écrire une fois, et peut rapidement tirer à d'autres projets quand vous en avez besoin.
Essayer Hayoo! de recherche (lien en haut de hackage); il est venu avec cette, par exemple
http://hackage.haskell.org/packages/archive/statistics/latest/doc/html/Statistics-Math.html#v:factorial
Vous avez le
product
d'une fonction qui est dans la norme prélude. Combiné avec des plages, vous pouvez obtenir une fonction factorielle avec un minimum d'effort.Si vous êtes à la recherche d'une expression lambda, alors vous pouvez toujours utiliser le classique
fix (\f x -> if x == 0 then 1 else x * (f (x - 1)))
.