在函数 Ocaml 中使用“_”

Use of " _ " in functions Ocaml

如果我有一个没有参数并且在列表上工作的函数,例如:

let listToCheck = function
 [] -> raise (Failure "No elements")
 | hd :: tl -> returnTrueOrFalse _ (*Where "_" should be the list*)

returnTrueOrFalse 定义为:

let returnTrueOrFalse list_ = .... (*returns true or false*)
.
(*some code*)
.
let isTrue = listToCheck [1;2;3] in isTrue

现在,listToCheck 在列表中被调用并且没有参数。

另一方面returnTrueOrFalse需要争论。

由于 listToCheck 是一个调用列表的函数,我可以使用 listToCheck 中的 _ 将该列表作为参数传递给 returnTrueOrFalse 吗?如果是,如何?

您可以重建列表,或者为模式添加别名,或者根本不拆分为头尾:

let listToCheck = function
  | []       -> raise (Failure "No elements")
  | hd :: tl -> returnTrueOrFalse (hd::tl)
let listToCheck = function
  | []                 -> raise (Failure "No elements")
  | (hd :: tl) as list -> returnTrueOrFalse list
let listToCheck = function
  | []   -> raise (Failure "No elements")
  | list -> returnTrueOrFalse list

您的函数根本不需要进行模式匹配:

let listToCheck list =
    if list = [] then failwith "No elements"
    else returnTrueOrFalse list

不过,您可能问的是一个更笼统的问题,而不是关于这个特定代码的问题。对于一般情况,我认为 as 模式可能是您正在寻找的,正如@Bergi 所建议的那样。