F# 如何使用递归将单个元素分发到列表的每个元素中
实现方法
你已经写对了递归的终止条件:当传入列表为空时,没有元素需要配对,直接返回空列表[]就符合逻辑。
剩下只需要补全非空列表的匹配分支即可,递归逻辑如下:
- 当匹配到列表为「头元素h + 剩余尾部列表t」的结构时,先构造待分发元素
x和当前头元素h的元组 - 递归调用
con函数处理尾部列表t,把当前构造的元组拼接在递归返回结果的头部,就是当前分支的返回值
补全后的完整可运行代码:
let rec con (x: 'a) (l: 'b list) = match l with | [] -> [] | h :: t -> (x, h) :: con x t
效果验证
执行测试用例:
con "DOG" [1;2;3]
返回结果为[("DOG", 1); ("DOG", 2); ("DOG", 3)],完全符合预期。
补充:该功能也可以直接用内置的列表映射函数实现,无需手动编写递归逻辑:
let con x l = List.map (fun h -> (x, h)) l
内容的提问来源于stack exchange,提问作者kelperg1
相关产品推荐
相关产品推荐

