2016-03-29 9 views
-2

Ich sehe die FunktionWas ist die Schreibweise (_: xs) in haskell?

last_element :: [a] -> a 
last_element (_:xs)= last_element xs 

Ich verstehe nicht, den Unterstrich Doppelpunkt in "(_: xs)". Ich habe gelesen, dass es den Kopf von der eingegebenen Liste trennt. Entfernt der Unterstrich-Doppelpunkt nur die erste Ziffer oder den "Kopf" der Liste auf primitive rekursive Weise?

bearbeiten, von meinem Verständnis würde diese Funktion einen Basisfall fehlen. Ist das richtig?

Antwort

1

Die Unterstreichung ermöglicht Ihnen die Musterübereinstimmung, impliziert jedoch, dass Sie den Wert nicht tatsächlich verwenden. Ihr Mustervergleich ist nicht erschöpfend, also wird es nicht funktionieren. Sie müssen die fehlenden Muster definieren, um sie zu beheben:

+1

In OPs Beispiel fehlt jedoch ein Basisfall. – gallais

+0

Wie unterscheidet sich die Verwendung eines Unterstrichs ohne den Doppelpunkt? Ich glaube, Sie können Mustervergleich von sagen, (Int, String), nur von (_ "Hallo") tun, nicht wahr? –

+0

Der Doppelpunkt ist der Operator [Nachteile] (https://en.wikipedia.org/wiki/Cons). '(x: xs)' entspricht dem ersten Element einer Liste als 'x' und der Rest der Liste als' xs'. Da Ihre Funktion nicht das erste Element in der Liste verwendet, ignoriert sie es mit dem Unterstrich. –

Verwandte Themen