我有以下函数,它需要一个实数并计算其连续分数。
但是我尝试使用match使它成功,但是我不知道它是否可能,因为我需要执行以下检查 b < 0.0000000001,但是我不知道如果没有if语句仅使用match怎么办呢,我需要能够使用let rec floatfrac (x : float) : int list = let a = int x let b = x - (float a) match b with | b < 0.0000000001 -> [] // error here because wrong syntax | _ -> (floatfrac (1.0 / b ))printfn "%A" (floatfrac 3.14)错误FS0010:模式中意外的浮点文字。预期的中缀运算符,引号或其他标记。

最佳答案

您可以将match语句与防护一起使用-在这里您可以提供其他谓词来实现由case模式本身未捕获的值:

let rec floatfrac (x : float) : int list =
    let a = int x
    let b = x - (float a)
    match b with
    | _ when b < 0.0000000001 -> []
    | _ -> (floatfrac (1.0 / b ))
但是,正如您从两种情况都使用通配符的事实中所看到的那样,当简单的if可以时,首先使用匹配是没有意义的:
if b < 0.0000000001 then
    []
else
    floatfrac (1.0 / b)

09-27 07:08