我想在迭代列表时发生某些事情时返回一个值。如果X在迭代列表时发生,是否可以返回一个字符串,否则返回另一个字符串,如果它永远不会发生?
let f elem =
if not String.contains str elem then "false" in
List.iter f alphlist;
"true";
遗憾的是,这在我实现的方法中不起作用。
OCaml是一种函数式语言,因此您几乎需要专注于函数返回的值。在特殊情况下有一些方法可以返回不同的值,但是(恕我直言)学习的最佳方法是从普通的旧嵌套函数调用开始。
List.iter
总是返回相同的值:()
,也就是所谓的unit
。
出于这个原因,无论List.iter f alphlist
做什么,表达式()
也将总是返回f
。
还有另一种列表处理函数,它通过在所有调用中维护一个值并在最后返回该值来工作。它被称为折叠。
所以,如果你想计算一些值,它是alphlist
中所有字符串列表中所见内容的总结,你可能应该使用折叠,比如List.fold_left
。
这是一个函数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
。
我希望这有帮助。