Functional programming “u”的使用&引用;在函数Ocaml中

Functional programming “u”的使用&引用;在函数Ocaml中,functional-programming,ocaml,Functional Programming,Ocaml,如果我有一个没有参数且在列表上工作的函数,比如: let listToCheck = function [] -> raise (Failure "No elements") | hd :: tl -> returnTrueOrFalse _ (*Where "_" should be the list*) 使用returnTrueOrFalse定义为: let returnTrueOrFalse list_ = .... (*retur

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

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 -> returnTrueOrFalse (hd::tl)

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

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

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

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

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

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

不清楚您所说的“使用匿名函数”是什么意思,也不清楚您为什么要这样做。你不能只写
print_字符串(如果returnTrueOrFalse[1;2;4;8]然后是“True”或者“False”)?我对这个问题做了一点修改,不是在函数上,而是在“\ux”上。不清楚“使用匿名函数”是什么意思,或者为什么要这样做。你不能只写
print_字符串(如果returnTrueOrFalse[1;2;4;8]然后是“True”或者“False”)?我对这个问题做了一点修改,不是在函数上,而是在“\ux”上。是的,这正是我想要的,“as list”!非常感谢。是的,这正是我要找的“名单”!非常感谢你。