list - 我想在 "then"语句中的 "if.. then.. else"语句之后做两件事

标签 list ocaml

let rec filtersList2fromList1 (List1:string list) (List2:string list) : string list =  
 let finalList = [] in  
 match List1 with  
 | s :: tl -> if List.mem s List2 = true   
 then finalList @ [s] else filtersList2fromList1 tl List2  
        | [] -> []

以便,
filtersList2fromList1 ["x";"y";"z"] ["z";"x"] would be ["x";"z"]  
filtersList2fromList1 ["x";"y";"z"] ["x"] would be ["x"]

我想补充的是,如果“if”语句为真,它不仅会执行“finalList @ [s]”,还会执行“filtersList2fromList1 tl List2”,这样它将是一个递归。为真时不执行“filtersList2fromList1 tl List2”,
filtersList2fromList1 ["x";"y";"z"] ["z";"x"]只会是 ["x"] ,这是错误的。

我应该如何解决这个问题?

非常感谢你

最佳答案

要回答您的具体问题,您可以使用分号或 let...in构造。在你的情况下,两者都不会做你想做的事。

您应该阅读标准库上的文档,如 List模块包含您需要做的所有事情:

let filterList2fromList1 list1 list2 =
  List.filter (fun x -> List.mem x list2) list1

关于list - 我想在 "then"语句中的 "if.. then.. else"语句之后做两件事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4695930/

相关文章:

oop - scala 有功能对象的快捷方式吗?

c - C中列表的所有元素的总和

python - 如何计算每分钟数据集的 15 分钟标准差?

r - 如何通过赔率和偶数标准按位置用列表值填充两个不同的列

parsing - 在用 Ocaml 编写的编译器中,在哪里/如何声明变量的唯一键?

gcc - 去掉cpp生成的注释

python - 如何查找字典值的长度

vb.net - 从 IRC 获取用户计数

ocaml - 这是我需要仿函数的情况吗?

Ocaml 打印元组列表