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

问题描述 投票:0回答:1

我想在迭代列表时发生某些事情时返回一个值。如果X在迭代列表时发生,是否可以返回一个字符串,否则返回另一个字符串,如果它永远不会发生?

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

"true";

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

ocaml
1个回答
1
投票

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

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.