2016-05-13 10 views
1

Ich habe den folgenden Code:Haskell "anders" Muster übereinstimmen?

swapInPairs :: [a] -> [a] 
swapInPairs [] = [] 
swapInPairs [x] = [x] 
swapInPairs (x:y:ys) = y : x : swapInPairs ys 

ist es eine Möglichkeit, so etwas wie

swapInPairs :: [a] -> [a] 
swapInPairs (x:y:ys) = y : x : swapInPairs ys 
otherwise = id 

Ich weiß, es ist nicht wirklich eine große Sache zu tun, und wird nur eine Zeile Code befreien, aber Ich bin gespannt, ob es so etwas für Mustervergleiche gibt, da Wächter "anders" haben.

Antwort

6

Mustererkennung wird im Allgemeinen nacheinander angewendet.

Also, wenn Sie ein ‚catch-all‘ -Version nach einem spezifischeres Muster wird präzises Muster zuerst abgestimmt werden, und wenn es unmöglich ist, ein ‚catch-all‘ wird nicht sein Ding.

So können Sie tun

swapInPairs :: [a] -> [a] 
swapInPairs (x:y:ys) = y : x : swapInPairs ys 
swapInPairs x = x 
+0

Ja! Ich habe es herausgefunden, gleich nachdem ich es gepostet habe, aber wahrscheinlich werde ich deine Antwort akzeptieren, nur weil ich "ide-haskell" sehr mag: p. Danke, dass Sie daran gearbeitet haben. – m0meni

+1

Danke für die Verwendung :) – lierdakil

3

Stellt sich um Angelegenheiten in Pattern-Matching, und ich wusste nicht, dass:

swapInPairs :: [a] -> [a] 
swapInPairs (x:y:ys) = y : x : swapInPairs ys 
swapInPairs x = x 

funktioniert.

+0

Ich weiß, es hat mir 1 Minute nach der Frage zu stellen, dies herauszufinden, aber da [Haskell sonst Mustererkennung] (https://www.google.com/search ? q = haskell + sonst + muster + match & oq = haskell + andere & aqs = chrome.0.69i59j0j69i57j0l3.1382j0j4 & sourceid = chrome & ie = UTF-8) stellt sich bei google definitiv nicht ein Ich dachte, ich sollte meine Frage nicht löschen. – m0meni

Verwandte Themen