Ich bekomme einen frustrierenden Fehler, wenn ich versuche, die ersten beiden Ziffern einer Zahl zu extrahieren. Zuerst erarbeite ich die Länge der Ziffer mit log, dann teile ich die Zahl durch die 10^(length of digit - 2)
, um die ersten zwei Ziffern zu extrahieren. Die len- und divisor-Funktionen funktionieren gut, aber die firstTwo-Funktion schlägt fehl, und ich verstehe das nicht, weil es so einfach zu sein scheint. Ich habe sogar versucht, {-# LANGUAGE FlexibleContexts #-}
hinzuzufügen, aber nichts. Bitte helfen. Hier ist der Code:Extrahieren der ersten zwei Ziffern einer Nummer haskell
len n = (+) 1 $ truncate $ logBase 10 n -- length of a digit
divisor n = 10^(len n - 2)
firstTwo n = div n divisor
Der Fehler, den ich bekommen ist:
Nicht typ Variable Argument in der Einschränkung: Integral (r -> a)
(Use FlexibleContexts to permit this)
When checking that ‘firstTwo’ has the inferred type
firstTwo :: forall a r.
(Floating r, Integral (r -> a), Num a, RealFrac r) =>
(r -> a) -> r -> a
Versuchen Typ Signaturen Hinzufügen eines besseren Fehler zu erhalten. – melpomene
Sie müssen auch überprüfen, dass der Exponent nicht negativ ist.In anderen Worten stellen Sie sicher, dass Ihre Nummer mindestens 2 Ziffern hat. – mathk