Hallo, ich brauche das n-te Element einer Liste, aber ohne das !! Operator. Ich bin extrem neu in Haskell, also würde ich mich freuen, wenn Sie detaillierter und nicht nur eine Zeile Code beantworten können. Das versuche ich gerade:
%Vor%Aber ich bekomme: Parse Fehler (möglicherweise falsche Einrückung)
Vielen Dank im Voraus!
Es gibt eine Menge, die ein bisschen hier ist,
%Vor%ist technisch korrekt, wirklich wollen wir
%Vor%So können wir das auf Listen von irgendetwas verwenden (optional)
%Vor% Was Sie gerade gesagt haben, ist "Egal was Sie nthel
return 0 geben". was eindeutig falsch ist.
Das ist einfach kein legaler Haskell. let ... in ...
ist ein Ausdruck, es kann nicht in Top-Level verwendet werden.
Von dort bin ich nicht wirklich sicher, was das tun soll.
Vielleicht hilft Ihnen das, den richtigen Weg zu finden
%Vor%Geben Sie% ce_de% mit Ihrer besten Schätzung ein und ich bin glücklich, von dort zu helfen.
Alternativ können Sie die Haskell-Syntax "pattern matching" verwenden. Ich erkläre, wie Sie dies mit Listen hier tun können.
Das ändert unser oben auf
%Vor% Dies ist praktisch, da es die explizite Verwendung von explizitem <???>
und head
s unnötig macht.
Ich denke, du meintest das:
%Vor%... was Sie vereinfachen können als:
%Vor% Ich denke, Sie sollten es vermeiden, last
zu verwenden, wann immer es möglich ist - Listen werden so erstellt, dass sie vom "Frontend" aus verwendet werden, nicht von der Rückseite. Was Sie wollen, ist die ersten n Elemente loszuwerden, und dann den Kopf der verbleibenden Liste zu bekommen (natürlich erhalten Sie einen Fehler, wenn der Rest leer ist). Sie können dies direkt wie folgt ausdrücken:
Oder kürzer:
%Vor%Oder ein bisschen verrückt:
%Vor%Wie Sie wissen, sind Listen nicht natürlich indiziert, aber es kann mit einem gemeinsamen Tipps überwunden werden.
Versuchen Sie es mit ghci, zip [0..] "hello"
, Was ist mit zip [0,1,2] "hello"
oder zip [0..10] "hello"
?
Ausgehend von dieser Beobachtung können wir nun leicht eine Möglichkeit finden, unsere Liste zu indizieren
Darüber hinaus ist eine gute Illustration der Verwendung von Faulheit, ein guter Hinweis für Ihren Lernprozess.
Dann können wir basierend auf diesem Muster einen effizienten Algorithmus verwenden.
Nun zur Helper-Funktion, die Liste darf nicht leer sein, dann können wir naiv Muster bilden, und,
Zusätzliche Anmerkung, da unsere Funktion fehlschlagen kann (leere Liste ...), könnte es eine gute Sache sein, unser Ergebnis mit Maybe type zu verpacken.
Wenn wir das alles zusammenfügen, enden wir damit.
%Vor%Tags und Links haskell