OCaml返回if语句嵌套在循环中的值

时间:2018-09-15 01:14:13

标签: ocaml

如果在遍历列表时发生某些事情,我试图返回一个值。如果遍历列表时发生X,是否可以返回一个字符串,否则,如果永不发生,则返回另一个字符串?

let f elem =
  if not String.contains str elem then "false" in
List.iter f alphlist;

"true";

可悲的是,这在我的实现方法中不起作用。

1 个答案:

答案 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

我希望这会有所帮助。