匹配表达式与模式匹配函数

Lea*_*erX 0 f# pattern-matching

我正在尝试将以下模式匹配函数转换为匹配表达式:

let reverse ls =
    let rec rev acc =
        function
        | h :: t -> rev (h :: acc) t
        | [] -> acc

    rev [] ls
Run Code Online (Sandbox Code Playgroud)

当我尝试转换为等效匹配表达式类型时,会发生不匹配错误:

let reverse ls =
    let rec rev acc =
        match acc with
        | h :: t -> rev (h :: acc) t
        | [] -> acc

    rev [] ls
Run Code Online (Sandbox Code Playgroud)

两者所需的输出是:

reverse [ 1; 2; 3 ]
// val it : int list = [3; 2; 1]
Run Code Online (Sandbox Code Playgroud)

Fyo*_*kin 7

您的匹配表达式不等效。要获得与基于 - 的代码等效的function功能,该函数应如下所示:

let rec rev acc x =
    match x with
    | h :: t -> rev (h :: acc) t
    | [] -> acc
Run Code Online (Sandbox Code Playgroud)

请注意额外的参数x- 这就是区别。该function关键字不仅相当于match,还相当于与其参数匹配的函数。换句话说,function ...相当于fun x -> match x with ...