Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming 如何在没有递归ocaml的情况下展平列表?_Functional Programming_Ocaml_Fold_Flatten - Fatal编程技术网

Functional programming 如何在没有递归ocaml的情况下展平列表?

Functional programming 如何在没有递归ocaml的情况下展平列表?,functional-programming,ocaml,fold,flatten,Functional Programming,Ocaml,Fold,Flatten,如何在ocaml中将整数列表展平为单个整数列表?该功能的工作原理如下所示 [[1;2];[3;4;5];[];[6]] -> [1;2;3;4;5;6] 由于这是家庭作业,因此必须仅使用fold_left或fold_right来完成,不能使用“@”运算符,也不能使用递归。我知道累加器将成为新列表的成员,但我不知道如何将原始列表的元素实际移动到累加器中。任何提示都将不胜感激。以下是一些提示: a。将值移动到累加器并不困难。如果您的值是x,而累加器是a,您可以只写x::a b。您主要需要以一

如何在ocaml中将整数列表展平为单个整数列表?该功能的工作原理如下所示

[[1;2];[3;4;5];[];[6]] -> [1;2;3;4;5;6]
由于这是家庭作业,因此必须仅使用fold_left或fold_right来完成,不能使用“@”运算符,也不能使用递归。我知道累加器将成为新列表的成员,但我不知道如何将原始列表的元素实际移动到累加器中。任何提示都将不胜感激。

以下是一些提示:

a。将值移动到累加器并不困难。如果您的值是
x
,而累加器是
a
,您可以只写
x::a

b。您主要需要以一致的顺序处理所有内部值。这就是褶皱的作用

c。折叠用于处理列表中的元素。但是你有一个列表

List.fold_left (fun liRes la -> 
  List.fold_right ( fun iRes la ->
    iRes::la    
  ) liRes la
) [] [[1;2];[3;4;5];[];[6]]
结果:

- : int list = [1; 2; 3; 4; 5; 6]
其他形式:

let (@) =
  List.fold_right ( fun iRes la ->
    iRes::la
  );;

 List.fold_left (fun liRes la -> 
   liRes @ la
 ) [] [[1;2];[3;4;5];[];[6]];;
您可以尝试:

# []@[1;2];;
- : int list = [1; 2]
# (@) [1;2] [3;4];;
- : int list = [1; 2; 3; 4]

(我不确定为某人的家庭作业问题提供代码是否有帮助。)