4 Stimmen

Instanz einer gebrochenen [Char]-Zahl erforderlich für die Definition?

Dies ist einfacher Code, der dazu gedacht ist, eine Dezimalzahl zu nehmen und eine Zeichenfolge zurückzugeben, die dem Äquivalent in Binärcode entspricht.

b2d :: Int -> String

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

Wenn ich jedoch versuche, dies durch hugs laufen zu lassen, gibt es mir einen Fehler:

:3 - Instanz von Bruchteil [Char] erforderlich für die Definition von b2d

Ich weiß nicht, was das bedeutet. Kann mir jemand sagen, wie ich das beheben kann?

Prost.

9voto

newacct Punkte 114757

Du wolltest wahrscheinlich (Funktionsaufrufe haben eine höhere Präzedenz als Operatoren):

b2d (x/2)

Auch dein erster Fall sollte wahrscheinlich keine 2 Argumente enthalten

6voto

Nefrubyr Punkte 6606

/ ist der Bruchteilungsbetreiber. Für Ganzzahlen müssen Sie div verwenden (und wie newacct erwähnt, Klammern hinzufügen):

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

Für zusätzliche Effizienzpunkte verwenden Sie divMod, um nur eine Division durchzuführen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X