F# 如何防止急于评估?

F# 如何防止急于评估?,f#,F#,我正在尝试一些大量使用printfn的示例。我创建了一个控制台应用程序,但所有函数都会打印输出,无论我是否调用它们。我相信我的错误背后是热切的评价。这是我的密码: TextFormat.fs: module TextFormat let printPi = let pi = System.Math.PI printfn "float: %f, exponent: %e, compact: %g" pi pi pi let petabyt

我正在尝试一些大量使用printfn的示例。我创建了一个控制台应用程序,但所有函数都会打印输出,无论我是否调用它们。我相信我的错误背后是热切的评价。这是我的密码:

TextFormat.fs:

module TextFormat

    let printPi =
        let pi = System.Math.PI
        printfn "float: %f, exponent: %e, compact: %g" pi pi pi

        let petabyte = pown 2.0 50
        printfn "float: %f, exponent: %e, compact: %g" petabyte petabyte petabyte

    let printDecimal =
        let largeM = 123456789.123456789M
        printfn "float: %f, decimal: %M" largeM largeM

    let RunExamples () =
        do printDecimal
Program.fs:

open TextFormat

let exit () =
    printfn ""
    printfn "Press any key to exit"
    System.Console.ReadLine() |> ignore

[<EntryPoint>]
let main argv = 
    RunExamples()

    exit()
    0 // return an integer exit code

如何强制程序只打印所需的行?

问题在于您不是在定义函数,而是在定义值

当您在F中写入以下内容时:

let test =
  printfn "Hi"
。。。您正在定义一个值测试,该测试的类型单位类似于C中的void,它将立即进行计算,并且表达式的结果存储在名为test的值中。表达式的结果是一个单位值,您无法对其进行太多处理,但它是一个有效值

另一方面,当你写作时:

let test () =
  printfn "Hi"
。。。您正在定义一个函数unit->unit,它仅在您调用它时计算,然后它打印Hi并返回一个单位值作为结果。要调用函数,您还需要使用单位值作为参数编写测试,而不仅仅是引用函数但不调用它的测试

因此,在您的示例中,您需要添加一个参数,例如:

let printPi () =
    let pi = System.Math.PI
    printfn "float: %f, exponent: %e, compact: %g" pi pi pi

    let petabyte = pown 2.0 50
    printfn "float: %f, exponent: %e, compact: %g" petabyte petabyte petabyte

问题在于,您不是在定义函数,而是在定义值

当您在F中写入以下内容时:

let test =
  printfn "Hi"
。。。您正在定义一个值测试,该测试的类型单位类似于C中的void,它将立即进行计算,并且表达式的结果存储在名为test的值中。表达式的结果是一个单位值,您无法对其进行太多处理,但它是一个有效值

另一方面,当你写作时:

let test () =
  printfn "Hi"
。。。您正在定义一个函数unit->unit,它仅在您调用它时计算,然后它打印Hi并返回一个单位值作为结果。要调用函数,您还需要使用单位值作为参数编写测试,而不仅仅是引用函数但不调用它的测试

因此,在您的示例中,您需要添加一个参数,例如:

let printPi () =
    let pi = System.Math.PI
    printfn "float: %f, exponent: %e, compact: %g" pi pi pi

    let petabyte = pown 2.0 50
    printfn "float: %f, exponent: %e, compact: %g" petabyte petabyte petabyte

我真傻,我现在应该把这些东西。谢谢你愚蠢的我,我现在应该把这些东西。非常感谢。