f#中是否有一种方法可以对f#中两个列表的所有可能元素组合执行运算?
示例
precachImage()
然后乐趣加上l1 l2将执行l1 = [1;2;3]
l2=[4;5;6]
let plus x y = x+y
因此输出:[(1+4);(1+5);(1+6);(2+4);(2+5);(2+6);(3+4);(3+5);(3+6)]
注意:我已经尝试使用zip,但是每个元素只能使用一次。
答案 0 :(得分:2)
是的,最简单的方法是使用列表理解。
let t1 = [1;2;3]
let t2 = [4;5;6]
[for a in t1 do for b in t2 do yield a+b] //val it : int list = [5; 6; 7; 6; 7; 8; 7; 8; 9]
//as a function
let f lst1 lst2 = [for a in lst1 do for b in lst2 do yield a+b]
答案 1 :(得分:1)
另一种可能性是将List.collect与List.map组合:
let l1 = [1;2;3]
let l2 = [4;5;6]
l1 |> List.collect (fun x -> List.map ((+) x) l2) //output: [5; 6; 7; 6; 7; 8; 7; 8; 9]