Sie schreiben
aus meinem Verständnis Haskells „anhängen“ Funktion sollte einen Char in einen String/[Char] verketten können.
Ich habe keine Ahnung, wo Sie diese Idee haben. Es ist falsch. Ich schätze, Sie haben definiert
type Poly a = [a]
und ich werde mit dieser Annahme gehen.
instance (Num a, Show a) => Show (Poly a) where
Das ist falsch. Poly
ist ein Typ Synonym. Sie können Instanzen nur für geeignete erstklassige Typen deklarieren (die Anwendung eines Typkonstruktors auf null oder mehr Typvariablen). Sie können dieses Problem beheben, indem Sie stattdessen
newtype Poly a = Poly {getPoly :: [a]}
aber dann müssen Sie wickeln/auspacken die Poly
Daten Konstruktor je nach Bedarf. Sobald Sie das richtig verstanden haben, werden Sie wahrscheinlich feststellen, dass die Num
Einschränkung, die Sie gegeben haben, unnötig ist.
show p = ["" ++ form (p !! i) i | i <- [(length p)..0]]
Es gibt ein paar Probleme. Das große ist, dass dies keine Zeichenfolge (Liste von Zeichen) definiert, sondern eine Liste von Zeichenfolgen. Sie können dies im Allgemeinen beheben, indem Sie concat
auf das Ergebnis anwenden. Die zweite ist, dass "" ++ anything
nur anything
ist, weil das Verketten der leeren Liste mit einer anderen Liste nichts bewirkt. Das dritte Problem ist, dass Sie versuchen zu zählen, aber Sie haben es falsch gemacht. Diese Notation zählt nur hoch. Rückwärts zu zählen, müssen Sie zeigen, dass Sie möchten, rückwärts zu zählen:
let lp = length p in [lp, (lp-1) .. 0]
Das letzte, was ich sofort sehen (einige dieser Fehler werden in den vorangegangenen zwei Zeilen wiederholt):
| otherwise = e ++ "x^" ++ i ++ " + "
Jetzt i
ist ein Int
, und ++
funktioniert nur für Listen. Das wird also nicht funktionieren. Sie müssen zuerst i
in eine Zeichenfolge konvertieren, indem Sie show
verwenden. e
ist vom Typ a
und muss ebenfalls in eine Zeichenfolge konvertiert werden. Verwenden Sie dazu auch show
.
Ich kann schon einige Probleme sehen, aber Sie sollten wirklich die Definition von 'Poly' posten. – dfeuer
Auch sollten Sie klein anfangen und sich hocharbeiten. Können Sie die 'form'-Funktion auf der obersten Ebene schreiben (nicht in einer' where'-Klausel), mit einer eigenen Typ-Signatur? Sobald Sie das getan haben, können Sie ein wenig aufbauen ... – dfeuer