2009-09-23 3 views
4

Il s'agit d'un code simple conçu pour prendre un nombre décimal et renvoyer une chaîne représentant l'équivalent en binaire.Instance de [Char] fractionnaire requise pour la définition?

b2d :: Int -> String 

b2d 1 = "1" 
b2d x = show (x `mod` 2) ++ b2d x/2 

Cependant, lorsque je tente d'exécuter ce à travers des caresses, il me donne une erreur:

:3 - Instance of fractional [Char] required for definition of b2d 

Je ne sais pas ce que cela signifie. Quelqu'un peut-il me dire comment y remédier?

Cheers.

+1

Votre première définition de b2d semble erroné . La fonction ne prend pas deux arguments. –

Répondre

6

/ est l'opérateur de division fractionnaire. Pour les entiers, vous devez utiliser div (et ajouter entre parenthèses comme newacct mentionné):

b2d x = show (x `mod` 2) ++ b2d (x `div` 2) 

Pour les points d'efficacité supplémentaires, utilisez divMod seulement effectuer une division:

b2d x = let (q,r) = x `divMod` 2 
     in show r ++ b2d q 
9

que vous vouliez probablement (appels de fonction ont une priorité plus élevée que les opérateurs):

b2d (x/2) 

aussi votre premier cas devrait prendre probablement pas 2 arguments

Questions connexes