List 如何在OCaml中生成两个列表的成对乘积?
如何编写使两个列表笛卡尔乘积的函数? 例如,我有这个 需要这个吗List 如何在OCaml中生成两个列表的成对乘积?,list,ocaml,product,List,Ocaml,Product,如何编写使两个列表笛卡尔乘积的函数? 例如,我有这个 需要这个吗 ?模块列表中的功能组合,似乎符合您的要求 示例用法: let x = [1; 2; 3] let y = [4; 5; 6] List.combine x y (* => [(1, 4); (2, 5); (3, 6)] *) 请注意,该函数要求两个列表的长度相同。如果您希望它更灵活,您可能需要自己编写 如果您想使用任意函数组合列表,一种可能的方法是使用List.combine创建这个元组列表,然后使用List.ma
?模块
列表中的功能组合,似乎符合您的要求
示例用法:
let x = [1; 2; 3]
let y = [4; 5; 6]
List.combine x y (* => [(1, 4); (2, 5); (3, 6)] *)
请注意,该函数要求两个列表的长度相同。如果您希望它更灵活,您可能需要自己编写
如果您想使用任意函数组合列表,一种可能的方法是使用List.combine
创建这个元组列表,然后使用List.map
从每对元组创建一个结果。我没有做过任何OCaml开发,但考虑到它的功能背景,您要查找的函数通常命名为zip
。根据,列表中有一个名为combine
的函数似乎符合您的意图,但我不知道该引用有多权威。是的,list.combine可以做到这一点。但这看起来像是家庭作业,在这种情况下,列表模块中的函数可能被禁止……?这不是笛卡尔积!笛卡尔积是:[(a,d);(a,e);(a,f);(b,d);(b,e);(b,f);(c,d);(c,e);(c,f)]我对家庭作业问题没有投反对票。我投了反对票,因为这是OCaml中笛卡尔积的搜索结果,但问题是关于成对积的。我理解投票结果接近,但“离题”是错误的原因。看看对这个原因的描述。它应该已经关闭,因为没有显示足够的努力,添加了一个MWE,等等。非常感谢,但这个功能应该更常见,所以我不能声明Listsorry,不会帮你做家庭作业。使用模式匹配帮助编写递归函数。
[a*d;b*e;c*f]
let x = [1; 2; 3]
let y = [4; 5; 6]
List.combine x y (* => [(1, 4); (2, 5); (3, 6)] *)