Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 具有匹配模式错误的F#递归函数_Recursion_F#_Pattern Matching_Syntax Error - Fatal编程技术网

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

Recursion 具有匹配模式错误的F#递归函数,recursion,f#,pattern-matching,syntax-error,Recursion,F#,Pattern Matching,Syntax Error,我有下面的函数,它取一个实数并计算它的连分数。 然而,我已经尝试使用match来实现它,但我不知道这是否可能,因为我需要执行以下检查b

我有下面的函数,它取一个实数并计算它的连分数。 然而,我已经尝试使用match来实现它,但我不知道这是否可能,因为我需要执行以下检查
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)