"), и порядок (сопоставление сверху вниз) может иметь значение, если шаблоны перекрываются (чего нет в любом из вышеперечисленных)
ужно использовать методы сопоставления с образцом, чтобы рекурсивно поменять местами каждую пару элементов в списке. Так,[1, 2, 3, 4, 5]
вернется[2, 1, 4, 3, 5]
.
Я нашел две вещи:
List.length
: чтобы вернуть длину. Что полезно для работы с четными / нечетными списками.List.nth
: для возврата значения в указанное место в списке.drop.(list, i)
: чтобы вернуть значения после того, как первые элементы i удалены.Используя эти три вещи, я могу разобраться в некоторых методах рекурсии, но я не понимаю аспект сопоставления с образцом. Ниже приведен псевдокод без сопоставления с образцом.
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)
}
По сути, это может начать цикл по списку, обмен парами, размещение (объединение) их в конце списка и рекурсивное повторение этого до тех пор, пока не пройдут все пары.