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