F# 初学者在多个依赖名称上使用 let

标签 f# let

我讨厌问这样的菜鸟问题,但我在网上搜寻过很多高低低的东西——这实际上是我的第一天。

以下 VBA 摘录分配两个变量,其中第一个变量传入第二个变量(此代码来自 www.spreadsheetadvice.com):

If zabs <= 12.7 Then
    ...
    If zabs <= 1.28 Then
        Temp = y + a3 - a4 / (y + a5 + a6 / (y + a7))
        Q = a0 - zabs * (a1 - a2 * y / Temp)
    Else
        Temp = (zabs - b5 + b6 / (zabs + b7 - b8 / (zabs + b9 + b10 / (zabs + b11))))
        Q = pdF / (zabs - b1 + (b2 / (zabs + b3 + b4 / Temp)))
    End If
Else ...

我正在尝试在 F# 中复制它——不使用可变变量。这有效:

    let Temp = 
        if zabs <= 1.28 then
            y + a3 - a4 / (y + a5 + a6 / (y + a7))
        elif zabs <= 12.7 then
            (zabs - b5 + b6 / (zabs + b7 - b8 / (zabs + b9 + b10 / (zabs + b11))))
        else
            0.0

    let Q = 
        if zabs <= 1.28 then
            a0 - zabs * (a1 - a2 * y / Temp)
        elif zabs <= 12.7 then
            pdF / (zabs - b1 + (b2 / (zabs + b3 + b4 / Temp)))
        else
            0.0

但我不喜欢分离两个相关的变量——或者重复 If 语句。这不起作用,但已经很接近了:

    let Temp, Q = 
        if zabs <= 1.28 then
            y + a3 - a4 / (y + a5 + a6 / (y + a7)),
            a0 - zabs * (a1 - a2 * y / Temp)
        elif zabs <= 12.7 then
            (zabs - b5 + b6 / (zabs + b7 - b8 / (zabs + b9 + b10 / (zabs + b11)))),
            pdF / (zabs - b1 + (b2 / (zabs + b3 + b4 / Temp)))
        else
            0.0,
            0.0

我花了一段时间才弄清楚第 3、6、9 行的逗号(如果它们实际上是正确的)。但编译器认为我试图在分配 Temp 之前使用它。我想,或者希望,我只是错过了一个简单的习语。

最佳答案

这有效:

let Temp, Q = 
    if zabs <= 1.28 then
        let temp = y + a3 - a4 / (y + a5 + a6 / (y + a7))
        let q = a0 - zabs * (a1 - a2 * y / temp)
        temp, q
    elif zabs <= 12.7 then
        let temp = (zabs - b5 + b6 / (zabs + b7 - b8 / (zabs + b9 + b10 / (zabs + b11))))
        let q = pdF / (zabs - b1 + (b2 / (zabs + b3 + b4 / temp)))
        temp, q
    else
        0.0, 0.0

关于F# 初学者在多个依赖名称上使用 let,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31059656/

相关文章:

f# - 是否可以在 F# 的函数范围内声明类型?

swift - Swift 有没有办法在不使用 switch 语句的情况下获取关联值?

ios - swift 'does not have a member named'

Haskell:让列表理解产生意想不到的结果

lisp - 如何格式化嵌套的多值绑定(bind)?

Swift 1.2 在初始化后分配 let

f# - 从 Console.In 读取的函数返回以前的值

F#如何处理这个递归的相互类方法

winapi - 使用 MarshalAs 的 P/Invoke 签名的 F# 语法

f# - 在哪里可以找到 F# 模块 List 中 List.Map 的源代码?