gpt4 book ai didi

f# - 将函数应用于列表中的每个元组

转载 作者:行者123 更新时间:2023-12-04 16:42:38 25 4
gpt4 key购买 nike

对不起,如果这是非常基本的,我是函数式编程和 F# 的新手。

我必须创建一个函数,它接受一个元组列表 (string*int) 并返回一个元组列表 (string *int)

所以基本上我想对 pairList 中的每个元组应用一些函数并返回一个元组列表。

我猜我可以通过递归函数来做到这一点。

到目前为止,我有以下代码:

let rec aFunction (pairList:List<string*int>): List<string*int> =
match pairList with
| [] -> []
| head :: tail -> [fst head,snd (someFunc1 (someFunc2 (fst head,snd head)))]

这基本上只是将各种函数应用于列表的头部并返回一个元组列表。

为了让它适用于整个列表,我尝试了以下操作:
| head :: tail ->  [fst head,snd (someFunc1 (someFunc2 (fst head,snd head)));aFunction tail]

但我收到以下错误:

这个表达式应该有类型 string * int 但这里有类型 List < string * int >

最佳答案

这个函数实际上已经存在——它被称为 List.map .

分析你的错误,当你做 [a;b] ab需要有相同的类型。

您想要的是使用连接运算符 ::像这样:

| head :: tail ->  (fst head,snd (someFunc1 (someFunc2 (fst head,snd head)))) :: (aFunction tail)

但实际上你可以通过更好的模式匹配来使这个更整洁
| (a,b) :: tail ->  (a,snd (someFunc1 (someFunc2 (a,b)))) :: (aFunction tail)

关于f# - 将函数应用于列表中的每个元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39628775/

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