Intercambie pares de elementos en una lista utilizando la coincidencia de patrones

Necesito usar técnicas de coincidencia de patrones, para intercambiar recursivamente cada par de elementos en una lista. Entonces,[1, 2, 3, 4, 5] volvería[2, 1, 4, 3, 5].

Dos cosas que he encontrado:

List.length: para devolver la longitud. Lo cual es útil para lidiar con listas pares / impares.List.nth: para devolver un valor en el lugar designado en la lista.drop.(list, i): para devolver los valores después de que se eliminan los primeros elementos i.

Usando esas tres cosas, puedo entender algunos métodos de recursión, pero no entiendo el aspecto de coincidencia de patrones. A continuación hay un pseudocódigo sin ninguna coincidencia de patrones.

function(list):
  var a = first on list
  var b = second on list

  // odd case
  if(b = null | "")
  {
    list = drop.(list, 1) @ a
  }

  // even case
  else if(b = "" & a = "")
  {
    list = list
  }

  // recursive case
  else
  {
    list = function(drop.(list, 2) @ b @ a)
  }

Básicamente, esto podría comenzar a recorrer la lista, intercambiar los pares, colocarlos (concatenarlos) al final de la lista y repetir esto recursivamente hasta que haya pasado por todos los pares.

Respuestas a la pregunta(1)

Su respuesta a la pregunta