[英]OCaml return value in if statement nested in loop
我试图返回一个值,如果在遍历列表时发生某些事情。 如果遍历列表时发生X,是否可以返回一个字符串,否则,如果永不发生,则返回另一个字符串?
let f elem =
if not String.contains str elem then "false" in
List.iter f alphlist;
"true";
不幸的是,这在我的实现方法中不起作用。
OCaml是一种功能语言,因此您非常需要专注于函数返回的值。 在特殊情况下,有很多方法可以返回不同的值,但是(IMHO)最好的学习方法是从普通的旧嵌套函数调用开始。
List.iter
始终返回相同的值:( ()
,称为unit
。
因此,无论f
做什么,表达式List.iter f alphlist
也将始终返回()
。
还有另一种列表处理函数,其作用是在所有调用中维护一个值,并在最后返回该值。 这称为折痕。
因此,如果要计算某个值,该值是在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
。
我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.