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

Mar*_*ska 5 ocaml list

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  
        | [] -> []
Run Code Online (Sandbox Code Playgroud)

以便,

filtersList2fromList1 ["x";"y";"z"] ["z";"x"] would be ["x";"z"]  
filtersList2fromList1 ["x";"y";"z"] ["x"] would be ["x"]
Run Code Online (Sandbox Code Playgroud)

我想补充的是,如果"if"语句为真,它不仅会执行"finalList @ [s]",而且还会执行"filtersList2fromList1 tl List2",这样它就会是递归.如果为真,则不执行"filtersList2fromList1 tl List2",

filtersList2fromList1 ["x";"y";"z"] ["z";"x"]只会是["x"],这是错误的.

我该如何解决这个问题?

非常感谢你

Nik*_*chi 6

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

您应该阅读标准库上的文档,因为该List模块包含您执行所需操作所需的一切:

let filterList2fromList1 list1 list2 =
  List.filter (fun x -> List.mem x list2) list1
Run Code Online (Sandbox Code Playgroud)