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)
您的匹配表达式不等效。要获得与基于 - 的代码等效的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 ...