20 Stimmen

Wie schreibt man die Funktion "Paare" in Haskell?

Die Funktion Paare muss in etwa so funktionieren:

pairs [1, 2, 3, 4] -> [(1, 2), (2, 3), (3, 4)]

44voto

Dietrich Epp Punkte 193178
pairs [] = []
pairs xs = zip xs (tail xs)

21voto

Edward Kmett Punkte 29192

Sie könnten so weit gehen wie

import Control.Applicative (<*>)
pairs = zip <*> tail

sondern

pairs xs = zip xs (tail xs)

ist wahrscheinlich klarer.

6voto

Chuck Punkte 228137

Nur der Vollständigkeit halber eine "einfachere" Version mit expliziter Rekursion:

pairs (x:xs@(y:_)) = (x, y) : pairs xs
pairs _          = []

Das Konstrukt x:xs@(y:_) bedeutet "eine Liste mit einem Kopf x und einen Schwanz xs die mindestens ein Element enthält y ". Der Grund dafür ist y verdoppelt sowohl das zweite Element des aktuellen Paares als auch das erste Element des nächsten Paares. Andernfalls müssten wir einen Sonderfall für Listen der Länge 1 schaffen.

pairs [_] = []
pairs []  = []
pairs (x:xs) = (x, head xs) : pairs xs

2voto

barsoap Punkte 3366

Aufruf an den aztekischen Gott der fortlaufenden Zahlen:

import Control.Monad (ap)
import Control.Monad.Instances() -- for Monad ((->) a)

foo = zip`ap`tail $ [1,2,3,4]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X