Я долгое время программировал в императивном стиле, поэтому привыкание к функциональному мышлению заняло некоторое время.
В вашем примере вы пытаетесь найти первое кратное 20, которое проходит ваш тест checkMod. Это часть что . Для функциональной части how я рекомендую просмотреть методы, доступные для последовательностей. То, что вам нужно, это первый элемент последовательности (кратный 20), прошедший тест, например:
let multi20 = Seq.initInfinite (fun i -> i*20)
let compute = multi20 |> Seq.find checkMod
Первое предложение генерирует бесконечный список из двадцати (я его составил). Второе let находит первое число в указанном списке, которое проходит ваш тест. Ваша задача - убедиться, что на самом деле есть число, которое пройдет тест, но это, конечно, верно и для императивного кода.
Если вы хотите сжать две вышеупомянутые строки в одну, вы также можете написать
let computeCryptic = Seq.initInfinite ((*) 20) |> Seq.find checkMod
но я считаю, что подобные трюки в коде могут вызвать головную боль при попытке прочитать его несколько недель спустя.