gpt4 book ai didi

recursion - 具有匹配模式错误的F#递归函数

转载 作者:行者123 更新时间:2023-12-03 08:04:05 25 4
gpt4 key购买 nike

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

关于recursion - 具有匹配模式错误的F#递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64293292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com