gpt4 book ai didi

f# - 将列表上的函数应用于所有其他列表成员

转载 作者:行者123 更新时间:2023-12-05 01:19:12 25 4
gpt4 key购买 nike

假设我有一个起始列表

let test = [1; 2; 3; 4; 5]

我想将第一个元素添加到所有其他元素,然后将第二个元素添加到所有其他元素,依此类推,直到我最终得到类似

result = [1, [3; 4; 5; 6]; 
2, [3; 5; 6; 7];
3, [4; 5; 7; 8];
4, [5; 6; 7; 9];
5, [6; 7; 8; 9]]

对于我的一生,我无法弄清楚哪种 List.n 方法在这里是合适的,甚至有一个。我知道 List.map 不会这样做,我认为 List.reduceList.fold 也不会这样做,因为它们都是累加器,而不是单独的函数。

有没有办法做我想做的事?

感谢您的帮助

最佳答案

我不认为 List 模块中有一个可以轻松使用的直接函数,但有一个函数不时有用,并且您可以轻松定义自己:

let rec pick xs = 
match xs with
| [] -> []
| (x::xs) -> (x,xs) :: (List.map (fun (x',xs') -> (x',x::xs')) (pick xs))

这将产生元组,其中第一个组件是列表中的一个值,第二个组件是列表的左侧:

pick [1..5] =
[(1, [2; 3; 4; 5])
;(2, [1; 3; 4; 5])
;(3, [1; 2; 4; 5])
;(4, [1; 2; 3; 5])
;(5, [1; 2; 3; 4])]

有了这个,做你想做的事并不难:

let f xs = 
List.map (fun (x,xs) -> (x, List.map (fun y -> y+x) xs))
(pick xs)

示例

> f [1;2;3;4;5];;
[(1, [3; 4; 5; 6])
;(2, [3; 5; 6; 7])
;(3, [4; 5; 7; 8])
;(4, [5; 6; 7; 9])
;(5, [6; 7; 8; 9])]

关于f# - 将列表上的函数应用于所有其他列表成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36802958/

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