gpt4 book ai didi

ocaml - 返回列表中所有值的递归函数(在 OCaml 中)

转载 作者:行者123 更新时间:2023-12-01 01:31:22 25 4
gpt4 key购买 nike

我需要一个函数,它在每次迭代时递归返回(不打印)列表中的所有值。但是,每次我尝试对此进行编程时,我的函数都会返回一个列表。

let rec elements list = match list with
| [] -> []
| h::t -> h; elements t;;

每次在我编写的另一个函数中返回时,我都需要使用每个元素,所以我一次需要这些元素,但我无法弄清楚这部分。任何帮助,将不胜感激。

最佳答案

您的功能相当于:

let rec elements list = 
match list with
| [] -> []
| h :: t -> elements t

这是因为 a ; b评估 a (并丢弃结果)然后计算并返回 b .显然,这又等价于:
let elements (list : 'a list) = []

这不是一个非常有用的功能。

但是,在尝试解决此问题之前,请了解 objective-c aml 函数只能返回一个值 .返回多个值是不可能的。

有多种方法可以解决此限制。一种解决方案是将您希望返回的所有值打包成一个值:通常是元组或列表。因此,如果您需要返回任意数量的元素,您可以将它们打包到一个列表中,并让调用代码处理该列表:
let my_function () = [ 1 ; 2; 3; 4 ] in (* Return four values *)
List.iter print_int (my_function ()) (* Print four values *)

另一个不太常见的解决方案是提供一个函数并在每个结果上调用它:
let my_function action = 
action 1 ;
action 2 ;
action 3 ;
action 4
in
my_function print_int

与返回列表相比,这不太灵活,但可以说更快:列表可以被过滤、排序、存储......

关于ocaml - 返回列表中所有值的递归函数(在 OCaml 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4678829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com