Вернуть номер легко, просто ... вернуть его. Ваша проблема в том, что у вас нет номера для возврата, потому что вы не можете получить его напрямую из текущего состояния. Вы должны сами отслеживать число, используя некоторую внутреннюю переменную состояния.
При использовании рекурсии вы меняете состояние, вызывая свою функцию рекурсивно с «измененными» аргументами. Вы уже делаете это со списком здесь. Чтобы сохранить внутреннее состояние в рекурсивной функции, вы должны ввести другой аргумент, но не выставлять его снаружи. Вы можете решить это, используя внутреннюю рекурсивную вспомогательную функцию. Вот тот, который отслеживает предыдущий элемент и возвращает его при обнаружении совпадения:
let search f list =
let rec loop list prev =
match list with
| [] -> None
| head::tail ->
if f head then prev
else loop tail (Some head)
in
loop list None
Это глупый пример, но я не хочу просто решать вашу домашнюю работу за вас, потому что тогда вы не захотите ничему не научишься Используя это, вы сможете выяснить, как сохранить счетчик, в каком положении находится текущий элемент, и вернуть его, когда он совпадает. Удачи!