为什么首先打印“DIV / 0”,然后打印“2”秒?
let printZero = printfn "DIV/0"
let printSuccess x = printfn "%d" x
let div ifZero success x y =
if y = 0
then ifZero
else x / y |> success
let printDiv = div printZero printSuccess
printDiv 8 4
printDiv 10 0
答案 0 :(得分:5)
printfn "DIV/0"
将立即写入控制台,返回unit
。所以这一行:
let printZero = printfn "DIV/0"
...将立即写入DIV/0
并将unit
绑定到值printZero
。稍后当您使用div
调用y = 0
函数时,您只需返回该值。
你想要printZero
成为一个功能。由于该函数不需要任何值作为输入,您也可以在此处使用unit
(表示为()
) - 因此您具有unit -> unit
类型的函数:
let printZero() = printfn "DIV/0"
let printSuccess x = printfn "%d" x
let div ifZero success x y =
if y = 0
then ifZero()
else x / y |> success