作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 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/
我是一名优秀的程序员,十分优秀!