Я пытаюсь реализовать следующий алгоритм в функциональном языке, используя неизменяемость, функции более высокого порядка и/или рекурсию (без циклов или мутации).Как реализовать этот алгоритм без мутации
Алгоритм выполняет итерацию списка, а для каждой пары соседних элементов свопирует их, если слева больше правого.
Однако, если разница между двумя соседними элементами меньше некоторого числа (скажем 10
), функция (notify
) должна быть вызвана с этими аргументами
Любые советы о том, как я могу переписать его?
for (i = 1, i < queue.legth, i++) {
left = queue[i-1]
right = queue[i]
if (abs(left - right) < 10) {
notify(left, right)
} else if (left > right) {
queue[i-1] = right
queue[i] = left
}
}
UPDATE
Да, вместо того, чтобы мутировать список на месте, новый список должен быть возвращен
Что значит «* без мутации»? –
делает 'forEach', или' сокращение' считается мутацией? –
_ "(нет циклов или мутаций)" _ Является ли рекурсия нарушенной? – guest271314