我正在尝试使用F#完成一些小任务,以便更好地掌握这门语言。
我想编写一个函数,该函数接受一个n维列表,并返回一个包含每个维度中所有元素的1维列表。
例如,如果输入是以下3维列表:[[[1;2];[3;4]];[[5;6];[7;8]]],则输出将为:[1;2;3;4;5;6;7;8]
对于2维到1维的转换,该函数非常简单:
我想编写一个函数,该函数接受一个n维列表,并返回一个包含每个维度中所有元素的1维列表。
例如,如果输入是以下3维列表:[[[1;2];[3;4]];[[5;6];[7;8]]],则输出将为:[1;2;3;4;5;6;7;8]
对于2维到1维的转换,该函数非常简单:
let coalesce list= List.collect(fun item -> item) list
以下是我试图将其推广到n维的内容:
let rec coalesce (list, dimension) =
if dimension = 1 then list
else coalesce (List.collect(fun item -> item) list, dimension - 1)
当我尝试编译时,出现以下错误:
error FS0001: 类型不匹配。期望
'a list list
但给出了
'a list
当统一''a'和''a list'时,结果类型将是无限的
问题出在这里:
List.collect(fun item -> item) list
我显然在思考上有些问题。写这种函数的正确方式是什么?