我有以下函数,它需要一个实数并计算其连续分数。
但是我尝试使用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)