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
F# 写匹配的较短方法_F# - Fatal编程技术网

F# 写匹配的较短方法

F# 写匹配的较短方法,f#,F#,我有一个返回元组的函数: let rec pack l = let combine = List.fold packFunction (' ',[], []) l match combine with | (_,b,a) -> b::a |> List.rev |> List.tail 有没有一种方法可以在不使用匹配语句的情况下提取元组的某些部分 也就是说,我想在不使用

我有一个返回元组的函数:

let rec pack l = 
            let combine = List.fold packFunction (' ',[], []) l
            match combine with 
                            | (_,b,a) -> b::a |> List.rev |> List.tail
有没有一种方法可以在不使用匹配语句的情况下提取元组的某些部分

也就是说,我想在不使用匹配语句的情况下从(u,b,a)中得到b和a

let rec pack l = 
    let _,b,a = List.fold packFunction (' ',[], []) l
    b::a |> List.rev |> List.tail
始终可以直接从元组中提取:

let a,b = (1,1)


模式匹配可以在许多地方使用,而不仅仅是
match
es。在这种情况下,您似乎根本不需要
组合
pack
也不需要递归)

还有另一种说法(通过lambda参数进行模式匹配):


听起来你可能会觉得这很有启发性:
let a,b = functionWhichReturnsTuple
let pack l = 
    let _, b, a = List.fold packFunction (' ', [], []) l
    b::a |> List.rev |> List.tail
let rec pack l =
    List.fold packFunction (' ',[], []) l
    |> fun (_,b,a) -> b::a |> List.rev |> List.tail