7
votes

GCF / LCM à Haskell

Je suis extrêmement nouveau à Haskell.

Y a-t-il un moyen simple de trouver le GCF ou LCM (multiple moins commun) dans HASKELLL ?


0 commentaires

4 Réponses :


8
votes

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> xxx pré>

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


5 commentaires

Devrait probablement ajouter dans un SEQ 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


Tbh je pense que votre explication pourquoi vous ajoutez SEQ 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 ? Quelle est la la structure de données la plus extérieure ? Hors de quoi? Mettez comme ceci, il semble que Haskell fait quelque chose de totalement stupide, si vous n'écrivez pas que SEQ . Et pourquoi y a-t-il un avec rien ne suit?


Le SEQ n'est pas nécessaire, car B aura déjà été évalué afin de déterminer s'il est égal à 0.



16
votes

Par GCF, voulez-vous dire le plus grand facteur commun ou le plus grand diviseur commun? C'est gcd , disponible du prélude, tel quel LCM , le multiple le moins courant.


0 commentaires

3
votes

GCD 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: / est utilisée uniquement pour la division de points flottant, utilisez div et mod pour trouver le quotient et le reste lorsque vous souhaitez faire " division entière. " Le prélude définit également une fonction LCM pour un multiple le moins courant.


0 commentaires

1
votes

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)


0 commentaires