Question

Je suis assez nouveau dans Haskell programmation et je vais avoir du mal à comprendre pourquoi je reçois cette erreur dans mon code.

Mon problème est comme suit:Tout entier positif i, peut être exprimé comme i = 2^n*k, où k est impair, c'est une puissance de 2 fois un nombre impair.Nous appelons n l'exposant de 2 dans je.Par exemple, l'exposant de 2 dans 40 est de 3 (car 40 = 2^3*5) considérant que l'exposant de 2 dans 42 est 1.Si je en lui-même est impair, alors n est égal à zéro.Si, d'autre part, j'en est même, ce qui signifie qu'il peut être divisé par 2.Écrire une fonction exponentOfTwo pour trouver l'exposant de 2 dans son argument.

Je comprends la psuedocode et il semble assez simple:de manière récursive diviser je par 2 jusqu'à ce que le résultat est impair, le nombre de fois que la division arrive est n

voici mon code (ligne 31-32):

exponentOfTwo :: Int -> Int  
exponentOfTwo i = if odd i then 0 else 1 + exponentOfTwo (i 'div' 2)  

Je reçois le message d'erreur "erreur lexicale en chaîne/littéral de caractère au caractère 'i'" à la ligne 32 de la colonne 62.

J'ai essayé de chercher une solution à cette erreur partout et jusqu'à présent je n'ai pas eu de chance.

Était-ce utile?

La solution

Pour utiliser une fonction en infixi pour, l'entourez de backtstics (`), pas avec des guillemets simples (').Ces derniers sont pour les littéraux de caractère, ce qui, bien, ne sont qu'un caractère long.

Autres conseils

Les personnages sont autour de div backquotes, plutôt que la normale d'un devis?Ils doivent être de permettre à un nom de fonction pour être utilisé comme un opérateur infixe.J'ai changé dans votre définition et le code a fonctionné pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top