Recursion 具有匹配模式错误的F#递归函数
我有下面的函数,它取一个实数并计算它的连分数。 然而,我已经尝试使用match来实现它,但我不知道这是否可能,因为我需要执行以下检查Recursion 具有匹配模式错误的F#递归函数,recursion,f#,pattern-matching,syntax-error,Recursion,F#,Pattern Matching,Syntax Error,我有下面的函数,它取一个实数并计算它的连分数。 然而,我已经尝试使用match来实现它,但我不知道这是否可能,因为我需要执行以下检查b
b<0.0000000001
,但我不知道如果没有仅使用match的if语句,如何实现它,我需要能够使用操作符
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)
让rec floatfrac(x:float):int list=
设a=int x
设b=x-(浮动a)
匹配
|b<0.0000000001->[]//此处出现错误,因为语法错误
|(浮动压裂(1.0/b))
打印fn“%A”(浮动压裂3.14)
错误FS0010:模式中存在意外的浮点文字。应为中缀运算符、引号符号或其他标记。您可以将匹配语句与保护一起使用-在这里,您可以为值提供额外的谓词,以实现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 ))
让rec floatfrac(x:float):int list=
设a=int x
设b=x-(浮动a)
匹配
|_uu当b<0.0000000001->[]
|(浮动压裂(1.0/b))
但是,从两种情况下都使用通配符的事实可以看出,当简单的if可以执行以下操作时,首先使用匹配是毫无意义的:
if b < 0.0000000001 then
[]
else
floatfrac (1.0 / b)
如果b<0.0000000001,则
[]
其他的
浮动压裂(1.0/b)
您可以使用带有保护的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 ))
让rec floatfrac(x:float):int list=
设a=int x
设b=x-(浮动a)
匹配
|_uu当b<0.0000000001->[]
|(浮动压裂(1.0/b))
但是,从两种情况下都使用通配符的事实可以看出,当简单的if可以执行以下操作时,首先使用匹配是毫无意义的:
if b < 0.0000000001 then
[]
else
floatfrac (1.0 / b)
如果b<0.0000000001,则
[]
其他的
浮动压裂(1.0/b)