Допустим, есть недешёвая функция
f :: Integer -> Integer
a
f a == x
Дабы избавиться от излишней ленивости, используем рекурсию.
findX :: Integer -> Integer
findX n =
if f n == x then n
else findX (n+1)
Вычисления медленные и не представляют никаких данных для мониторинга. Совершенно не ясно, на каком аргументе в данный момент производится перебор.
Как можно реализовать следующие вещи?
1) Переборную функцию, вычисляющую значение f n сразу, если оно нас не устраивает, переходящую к следующему кандидату?
2) Некий аналог итерационного перебора (псевдокод):
for n = 1:10^7 do
if f n == x then printf "n founded (n)!"
else printf "testing n failed";
done