2016-11-13 6 views
2

Ich habe an einer Haskell-Funktion gearbeitet, die sowohl eine Liste als auch einen Wert annehmen soll. Es sollte die Liste umkehren und dann den Wert an die Front anhängen.Haskell-Funktion eine Liste umkehren und ein neues Element einfügen

Ich habe versucht, separate Reverse-und einfügen Funktion und einen auf den anderen, aber ich habe es versäumt, einen Weg zu finden, damit es funktioniert. Hier ist, was ich bisher:

Reverse-Funktion:

reverse' :: [a] -> [a] 
reverse' [] = [] 
reverse' (x:xs) = reverse' xs ++ [x] 

Funktion einfügen:

insert :: Ord a => a -> [a] -> [a] 
insert x [] = [x] 
insert x (y:ys) 
    | x > y  = y : insert x ys 
    | otherwise = x : y : ys 

Sollte ich eine dieser Funktionen auf der anderen nennen sollte? Wenn ja, wie würde ich das machen? Oder wenn ich nur eine Funktion machen sollte? Ich habe viel daran herumgebastelt und kann anscheinend nicht zur Arbeit kommen.

Vielen Dank für jede und alle Hilfe, wie ich noch ein Anfänger bin und die Sprache zu lernen!

+0

Was genau ist Ihre Frage? – leftaroundabout

+0

Ich entschuldige mich, dass ich diesen Teil nicht hinzugefügt habe, da es helfen kann, wenn Sie alle wissen, was die eigentliche Frage war! Grundsätzlich möchte ich wissen, ob ich eine dieser Funktionen auf der anderen Seite aufrufen soll oder ob ich nur eine Funktion ausführen soll. Ich habe viel daran herumgebastelt und kann anscheinend nicht zur Arbeit kommen. –

+1

@TomMoore Ich empfehle Ihnen, Ihren Beitrag zu bearbeiten, um die Frage hinzuzufügen. (Und während Sie dabei sind, würde ein weniger generischer Titel auch helfen.) – duplode

Antwort

1

Ihre reverse' Funktion funktioniert wie erwartet, so dass wir es die Liste rückgängig verwenden, die unsere Funktion übergeben wird (beachten Sie, dass es, obwohl als weniger effiziente Nutzung identisch ist, als reverse von Prelude). Die insert-Funktion, die Sie geschrieben haben, ist hier weniger nützlich, weil wir unseren Wert an die Vorderseite der Vorderseite der Liste einfügen möchten, nicht nach dem ersten Wert, der kleiner ist.

Wir werden also Ihre reverse' Funktion auf die Liste anwenden und den Eingangswert vor dem, was zurückgegeben wird.

reverseAndInsert :: a -> [a] -> [a] 
reverseAndInsert x xs = x : reverse' xs 
+0

'reverse' ist technisch nicht identisch mit" reverse "von Prelude, weil es O (n^2) und nicht O (n) ist. Dieser Unterschied kann von Bedeutung sein. – Carl

+0

@Carl Es ist * verwenden * ist das gleiche, aber ich habe die Aussage geändert. – mnoronha

+0

Danke @mnoronha! –

Verwandte Themen