Troque pares de elementos em uma lista usando a correspondência de padrões

Eu preciso usar técnicas de correspondência de padrões, para trocar recursivamente todos os pares de elementos em uma lista. Assim,[1, 2, 3, 4, 5] retornaria[2, 1, 4, 3, 5].

Eu encontrei duas coisas:

List.length: para retornar o comprimento. O que é útil para lidar com listas pares / ímpares.List.nth: para retornar um valor no local designado na lista.drop.(list, i): para retornar os valores após a eliminação dos primeiros i elementos.

Usando essas três coisas, posso descobrir alguns métodos de recursão, mas não entendo o aspecto da correspondência de padrões. Abaixo está um pseudocódigo sem nenhum padrão correspondente.

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)
  }

Essencialmente, isso poderia começar a percorrer a lista, trocar os pares, colocando-os (concatenando) no final da lista e repetindo-o recursivamente até que ele passasse por todos os pares.

questionAnswers(1)

yourAnswerToTheQuestion