如果在遍历列表时发生某些事情,我试图返回一个值。如果遍历列表时发生X,是否可以返回一个字符串,否则,如果永不发生,则返回另一个字符串?
let f elem =
if not String.contains str elem then "false" in
List.iter f alphlist;
"true";
可悲的是,这在我的实现方法中不起作用。
答案 0 :(得分:1)
OCaml是一种函数式语言,因此您非常需要专注于函数返回的值。在特殊情况下,有很多方法可以返回不同的值,但是(IMHO)最好的学习方法是从普通的旧嵌套函数调用开始。
List.iter
始终返回相同的值:()
,即unit
。
因此,无论List.iter f alphlist
做什么,表达式()
还将始终返回f
。
还有另一种列表处理函数,该函数通过在所有调用中维护一个值并在最后返回该值来工作。这叫做折叠。
因此,如果要计算某个值,该值是对alphlist
中所有字符串列表中所见内容的一种总结,则可能应该使用折叠,例如List.fold_left
。 / p>
这里是一个函数any_has_7
,该函数确定指定列表中的任何一个是否包含整数7:
let any_has_7 lists =
let has_7 sofar list =
sofar || List.mem 7 list
in
List.fold_left has_7 false lists
运行时的外观如下:
# any_has_7 [[1;2]; [3;4]];;
- : bool = false
# any_has_7 [[1;2]; [5;7]; [8;9]];;
- : bool = true
换句话说,此功能可以完成您所要求的功能。当一个或多个列表包含某个值时,它返回true
;当其中一个列表都不包含该值时,它返回false
。
我希望这会有所帮助。