F #: Взаимно рекурсивные функции

Возможный дубликат:
[F #] Как вызвать два метода вызова друг друга?

Привет всем,

У меня есть сценарий, в котором у меня есть две функции, которые выиграют от взаимной рекурсии, но я не уверен, как это сделать в F #

Мой сценарий не такой простой, как следующий код, но я хотел бы получить что-то похожее на компиляцию:

let rec f x =
  if x>0 then
    g (x-1)
  else
    x

let rec g x =
  if x>0 then
    f (x-1)
  else
    x

Ответ 1

Вы также можете использовать форму let rec... and:

let rec f x =
  if x>0 then
    g (x-1)
  else
    x

and g x =
  if x>0 then
    f (x-1)
  else
    x

Ответ 2

Чтобы получить взаимно рекурсивные функции, просто передавайте один в другой как параметр

let rec f g x =
  if x>0 then
    g (x-1)
  else
    x

let rec g x =
  if x>0 then
    f g (x-1)
  else
    x

Ответ 3

Используйте конструкцию let rec ... and ...:

let rec f x =
  if x>0 then
    g (x-1)
  else
    x

and g x =
  if x>0 then
    f (x-1)
  else
    x