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.