f# - 如何在 F# 中实现获取最大元素函数?
问题描述
我对 F# 很陌生,并且在一些基本功能上遇到了麻烦。我得到了一份清单:
let list1 = [1;2;3;4;5;6;7]
我将如何创建一个getMax
递归迭代list1
并找到最大元素的函数?
我最困惑的是我将返回什么以及如何遍历列表。
解决方案
类似于在命令式语言中,您将循环遍历每个项目并将最大值存储在变量中,我们编写一个尾递归函数,编译器会将其转换为循环。
let getMax list =
let rec loop current list =
match list with
| [] -> current
| head::tail -> loop (if head > current then head else current) tail
loop (List.head list) list
这很冗长,但它是一个很好的起点。当然总是有List.max
and List.maxBy
,但是理解循环的类比是它的一个重要部分。
推荐阅读
- javascript - 将循环结果输出到 .innerHTML
- java - 尝试检测玩家在我的 Minecraft 模组中的库存中是否有特定物品
- sql - 自加入计算给定日期前一天
- oracle12c - Oracle 12 C - Months_between 函数提供 18 个月,开始日期为 2020 年 6 月 30 日,结束日期为 2021 年 12 月 31 日
- firebase - Firebase+SwiftUI。无法转换价值
- java - 检查 requestBody 上的 Null 属性
- haskell - 这些线程是否永远被阻塞?
- reactjs - 使用 fetch 从数据库中获取记录但出现错误 400
- java - 有什么方法可以从 Android Studio 将数据写入 json 吗?
- c++ - 将可变参数函数参数转发到另一个可变参数函数