Поиск с возвратом — это хорошо известный метод решения проблем, который повторяется через все возможные комбинации назначений переменных в поисках действительного решения. Общий алгоритм абстрагируется в краткую функцию высшего порядка: https://en.wikipedia.org/wiki/Backtracking
Некоторые проблемы требуют частичного возврата, то есть они сочетают в себе не-знаю недетерминизм (есть выбор, это важно, если вы ошиблись, вам придется вернуться) и плевать на недетерминизм (есть выбор, который не имеет значения, возможно, важно, сколько времени вам потребуется, чтобы найти решение, но не его правильность, вы не надо отступать).
Рассмотрим, например, логическую проблему выполнимости, которую можно решить с помощью алгоритма DPLL. Если вы попытаетесь представить это с помощью общего алгоритма поиска с возвратом, результат будет повторяться не только через все 2 ^ N присвоений переменных (что, к сожалению, необходимо в общем случае), но и через все N! порядок проверки переменных (совершенно ненужный и безнадежно неэффективный).
Существует ли общий алгоритм частичного возврата? Краткая функция высшего порядка, которая принимает параметры функции как для вариантов не знаю, так и для безразлично?