我是OCaml的初学者,在使用match时有些困惑。对于这个问题,我正在学习在返回字符串列表的字符串列表上使用函数。我正在尝试运行一个函数,该函数在字符串列表中的每个元素上返回布尔值,并作为输出返回这些布尔值的字符串列表。例如,假设您具有以下条件:
let foo str =
(String.length str) > 3;;
let list1 = ["please";"help";"me"]
并且您希望将foo应用于list1中的每个元素,并将以下内容作为所需的输出:
output = [ "true";"true";"false"]
我所做的事情显然不起作用,因为我没有返回字符串列表:
let rec bar (ls : string list) : string list=
match foo ls with
| [] -> ()
| x :: xs -> x :: bar xs
;;
有人有任何想法我该怎么做吗?谢谢!
在您的匹配表达式中,两种情况都应返回一个列表,因为这是您想要作为结果的类型(而不是()
),例如
let rec bar (ls : string list) : string list=
match ls with
| [] -> []
| x :: xs -> (if (foo x) then "true" else "false") :: bar xs