___ qstnhdr ___ Implementierung der letzten Funktion
___ answer1201490 ___
Danke für die Antworten jeder. Ich habe es versucht ...
%Vor%
und ich bekomme zB ...
%Vor%
Gibt es überhaupt eine Möglichkeit, das "Nur" in der Antwort nicht auszudrucken?
[EDIT: Jörg W Mittag] (Kommentare sind für den Buchungscode schrecklich ...)
So sieht der gesamte Code im Kontext aus:
%Vor%
Die Lösung von Eraim sollte funktionieren (abgestimmt). Aber ich denke, das ist ein wenig mehr "Haskell-like":
%Vor%
Disclaimer: Ich habe das nicht wirklich versucht. Ich habe vielleicht Syntaxfehler gemacht.
Ich versuche, mir selbst Haskell beizubringen. Eine Sache, die ich versucht habe, ist, eine alternative Funktion zu schreiben, um das letzte Element einer Liste zurückzugeben, indem ich durch die Liste rekursiere, bis das Ende die leere Menge ist, und dann den Kopf zurückschicke. Ich habe ...
%Vor%
... aber ich erhalte einen Fehler, wenn ich eine nicht leere Liste versuche :(
Irgendwelche Vorschläge, was ich falsch gemacht habe?
TIA.
Das Problem - wie so viele andere, wenn Sie Haskell lernen - ist Tippen. Geben Sie Folgendes in GHCi ein
%Vor%
und Sie werden sehen, dass die Typensignatur
ist
%Vor%
erwartet eine Liste von Listen und gibt eine Liste zurück. Wenn Sie also eine Liste von Strings ["bob", "fence", "house"] eingeben, funktioniert die Funktion so, wie Sie sie geschrieben haben.
Das Problem ist Ihr Basisfall: mylast [] = [], der dem Compiler sagt, dass Sie eine Liste zurückgeben wollen. Sie möchten ein Element und keine Liste zurückgeben. Aber es gibt kein leeres Element in Haskell (sehr vom Design her), also musst du die Maybe-Monade verwenden.
%Vor%
Monaden sind ein etwas abstraktes Thema, aber Sie brauchen die Maybe-Monade, wenn Sie anfangen. Alles, was Sie darüber wissen müssen, ist, dass es eine Typdeklaration ist, die dem Compiler sagt, zwei Möglichkeiten zu erwarten: "Nothing" oder "Just x". Der zurückkehrende Code kann dann x nehmen und mit ihm laufen, aber wenn Sie das "Just" weglassen, wird sich der Compiler beschweren.
Die Alternative besteht darin, einen Fehler zu erzeugen, wenn eine leere Liste angetroffen wird, etwa so:
%Vor%
Aber mein Verdacht ist, dass vielleicht der Weg zu gehen ist.
Versuchen Sie stattdessen %code% . Andernfalls kann Haskell nicht auf den Typ Ihrer Funktion schließen.
___ tag123haskell ___ Haskell ist eine funktionale Programmiersprache mit starker statischer Typisierung, verzögerungsfreier Auswertung, umfangreicher Parallelitäts- und Parallelitätsunterstützung und einzigartigen Abstraktionsfunktionen.
___ answer43515287 ___