F# 使两个功能在范围内相互作用

F# 使两个功能在范围内相互作用,f#,F#,我们如何使两个功能相互了解?例如,在下面的代码中,我们如何使乒乓球和乒乓球互相呼叫 module PingPong = let pong = printfn "pong" ping // error: The value or constructor 'ping' is not defined. let ping = printfn "ping" pong [<EntryP

我们如何使两个功能相互了解?例如,在下面的代码中,我们如何使乒乓球和乒乓球互相呼叫

module PingPong = 

    let pong = 
        printfn "pong"
        ping 
        // error: The value or constructor 'ping' is not defined.

    let ping = 
        printfn "ping"
        pong

    [<EntryPoint>]
    let main argv = 
        ping
        0

因此,对于那些现在可能找到答案的人来说,作为一个后续问题,在F 4.1引入递归模块之前,我们如何在范围内使两个函数相互作用

您可以创建如下相互递归的定义:

let pong = 
    printfn "pong"
    ping
and ping = 
    printfn "ping"
    pong
但是你的let不是函数。您需要使用rec将pong标记为递归:

这个程序实际上不起作用,但它展示了这个概念。以下是最终将要完成的事情:

let rec pong x = 
    printfn "pong"
    ping (x - 2)
and ping x = 
    printfn "ping"
    match x with
    | 1 -> 1
    | 2 -> 1
    | x -> pong (x + 1)

> pong 5;;
pong
ping
pong
ping
val it : int = 1

您可以创建如下相互递归的定义:

let pong = 
    printfn "pong"
    ping
and ping = 
    printfn "ping"
    pong
但是你的let不是函数。您需要使用rec将pong标记为递归:

这个程序实际上不起作用,但它展示了这个概念。以下是最终将要完成的事情:

let rec pong x = 
    printfn "pong"
    ping (x - 2)
and ping x = 
    printfn "ping"
    match x with
    | 1 -> 1
    | 2 -> 1
    | x -> pong (x + 1)

> pong 5;;
pong
ping
pong
ping
val it : int = 1