Je suis extrêmement nouveau à Haskell. p>
Y a-t-il un moyen simple de trouver le GCF ou LCM (multiple moins commun) dans HASKELLL ? p>
4 Réponses :
Je ne suis pas sûr de ce que le LCF n'est que le GCF est un favori de haskell. En utilisant l'algroithme euclidien, vous pouvez vraiment avoir une idée de la façon dont Haskell fonctionne. http://fr.wikipedia.org/wiki/euclidean_algorithme Il y a une excellente explication de la façon dont le L'algorithme est configuré ici ici http://fr.literateprograms.org/euclidean_algorithm_(hakell) .
Ce type de récursion est courant dans HASKELLL et montre à quel point la langue peut être expressive. p> Ceci utilise le motif correspondant sur les arguments pour dire le plus grand facteur commun de N'importe quel nombre et 0 est le premier numéro. Si les chiffres sont à la fois non nuls, recherchez le plus grand facteur commun de la seconde et du premier mod de la seconde. Finalement, cela atteindra 0 dans le deuxième argument. Cela déclenchera le premier modèle et renvoyera le premier argument qui est la réponse. P> [EDIT] P> La fonction doit être la suivante: P> gcd a 0 = a
gcd a b = b `seq` gcd b (a `mod` b) where
Devrait probablement ajouter dans un SEQ code> ici.
Absolument. Bien que OP soit nouveau à Haskell, c'est aussi bon moment que tout pour l'apprendre.
Op sait probablement cela, mais lcm a b = let g = gcd a b dans (div a g) * b code>
Tbh je pense que votre explication pourquoi vous ajoutez SEQ code> n'est pas vraiment une aide pour les personnes nouvelles pour FP ou HASKELL. Par exemple: quelle est la forme la forme de tête faible i>? Quelle est la la structure de données la plus extérieure i>? Hors de quoi? Mettez comme ceci, il semble que Haskell fait quelque chose de totalement stupide, si vous n'écrivez pas que SEQ code>. Et pourquoi y a-t-il un où code> avec rien ne suit?
Le SEQ code> n'est pas nécessaire, car B code> aura déjà été évalué afin de déterminer s'il est égal à 0.
Par GCF, voulez-vous dire le plus grand facteur commun ou le plus grand diviseur commun? C'est gcd code>, disponible du prélude, tel quel LCM code>, le multiple le moins courant. P>
GCD code> est importé dans le prélude. Cela signifie que vous pouvez l'utiliser chaque fois que vous voulez sans rien aller. Erik Hinton présente une version simple de l'algorithme euclidien, si vous souhaitez la mise en œuvre de votre choix. Une chose si: / code> est utilisée uniquement pour la division de points flottant, utilisez div code> et mod code> pour trouver le quotient et le reste lorsque vous souhaitez faire " division entière. " Le prélude définit également une fonction LCM code> pour un multiple le moins courant. P>
ou vous pouvez également faire
euclid(n,m) =
if n == m then n
else if n < m then euclid(n, m-n)
else euclid(n-m, m)