首页 > 解决方案 > 在 F# 中调用函数后,如何在 F# 中重复函数?

问题描述

我有一个游戏,您可以在其中执行某些操作,然后在操作完成后,我有一个您可以再次执行的操作列表,但是在程序结束后完成后,我想因为它是一个递归函数,它会继续运行。

这不是我的游戏的一部分,而只是一个演示,该程序要求输入一个字符串,然后完成。它不应该一直要求一个字符串,我怎样才能让它做到这一点?我还尝试回调 f1 函数内的递归函数,但 f1 当然不知道它存在。

open System

let f1 x =
    printfn "Hello, %s" x

let rec f2 =
    let x = Console.ReadLine()
    f1 x

Console.Read() |> ignore

标签: functionrecursionf#

解决方案


如评论中所述,您定义f2为一个值,而不是一个函数。这已经在 StackOverflow 上讨论过,并且有一个很好的问题和答案涵盖了这一点。

另一个问题是您可能想要调用f2from f1(继续循环)以及调用f1from f2。为此,您可以使用let rec .. and语法将函数定义为相互递归:

let rec f1 x =
    printfn "Hello, %s" x
    f2 ()

and f2 () =
    let x = Console.ReadLine()
    f1 x

推荐阅读