如何递归调用2个函数?

时间:2014-05-07 21:23:53

标签: f#

我有两个功能:

let fn2 =
  if "something happend" then
    fn1

let rec fn1 =
  if "something" then
    fn2

这只是一个例子,我正在尝试做什么。有什么想法怎么做?

或者我应该将2.函数作为参数发送到1.函数?

2 个答案:

答案 0 :(得分:6)

您需要使用let rec ... and ...

let rec fn1 x =
    if x = "something" then
        fn2 x
and fn2 x =
    if x = "something else" then
        fn1 x

答案 1 :(得分:0)

你也可以嵌套 wrap 你的函数并创建两个高阶函数,它们将函数作为参数并应用它。

这可能不是......像:

let fn2 fn =
  if "something happend" then
    fn fn2

let rec fn1 fn =
  if "something" then
    fn fn1

您可以拨打电话,而不是像这样打电话给您的电话:

let result = fn1 fn2

如果您希望您的功能更加明确,您可以编写它,例如:

let rec fn2 (fn:unit->unit) : unit =
  if "something happend" then
    fn fn2

let rec fn1 (fn:unit->unit) : unit =
  if "something" then
    fn fn1

但我认为kvb的答案是更好的方法,因为它更符合标准且可读。