Implementierung der letzten Funktion

7

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.

    
user147056 29.07.2009, 12:27
quelle

6 Antworten

30
___ 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%     
___ answer1200016 ___

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.

    
___ qstntxt ___

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.

    
___ antwort1200022 ___

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.

    
___ answer43456165 ___
%Vor%     
___ answer1199971 ___

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 ___
%Vor%

rekursive Anruflösung

    
___
rtperson 29.07.2009 12:50
quelle
8

Versuchen Sie stattdessen mylast [] = error "Empty list!" . Andernfalls kann Haskell nicht auf den Typ Ihrer Funktion schließen.

    
EFraim 29.07.2009 12:39
quelle
6

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.

    
Craig Stuntz 29.07.2009 12:48
quelle
0

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%     
user147056 29.07.2009 16:31
quelle
0
%Vor%     
김은찬 17.04.2017 17:19
quelle
0
%Vor%

rekursive Anruflösung

    
Kah Shing Chee 20.04.2017 09:18
quelle

Tags und Links