gpt4 book ai didi

f# - 列表的笛卡尔半平方

转载 作者:行者123 更新时间:2023-12-02 09:27:54 26 4
gpt4 key购买 nike

如何在 F# 中生成列表与其自身的笛卡尔积的问题是一个熟悉的问题,但我需要稍微不同的东西:所得平方的一半。也就是说,[1; 2; 3] -> [(1, 2), (1, 3), (2, 3)]。

最明显的方法是使用带有整数索引的嵌套 for 循环,但是在 F# 中最惯用的方法是什么?我不关心性能,只关心简单和优雅。

最佳答案

我不确定,但我认为你想要这样的东西:

let pairs = function
| [] -> []
| (x::xs) -> List.map (fun x' -> (x,x')) xs

let rec hSquare xs =
match xs with
| [] -> []
| (_::ys) -> pairs xs @ hSquare ys

使用hSquare,您会得到例如:

> hSquare [1..3];;
val it : (int * int) list = [(1, 2); (1, 3); (2, 3)]
> hSquare [1..4];;
val it : (int * int) list = [(1, 2); (1, 3); (1, 4); (2, 3); (2, 4); (3, 4)]

其中包括您的示例

备注

  • 这肯定不是通常的笛卡尔积的一半(即[(1,1);(1,2);(1,3);(2,1);(2,2 );(2,3);(3,1);(3,2);(3,3)] 在你的情况
  • 我不关心性能、尾调用等任何问题 - 您肯定可以对此进行改进。
  • 我只是想知道您是否正在寻找此内容,而且它太大了,无法发表评论。

关于f# - 列表的笛卡尔半平方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29924079/

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