Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在F#中实现get Max element函数?_F# - Fatal编程技术网

如何在F#中实现get Max element函数?

如何在F#中实现get Max element函数?,f#,F#,我对F#还是个新手,在一些基本功能上遇到了麻烦。 我得到了一份清单: let list1 = [1;2;3;4;5;6;7] 我如何创建一个递归遍历list1并查找最大元素的getMax函数 我最困惑的是我将返回什么以及我将如何遍历列表。类似于,在命令式语言中,您将循环遍历每个项并将最大值存储在变量中,我们编写了一个尾部递归函数,编译器将其转换为一个循环 let getMax list = let rec loop current list = match list

我对F#还是个新手,在一些基本功能上遇到了麻烦。 我得到了一份清单:

let list1 = [1;2;3;4;5;6;7]
我如何创建一个递归遍历
list1
并查找最大元素的
getMax
函数


我最困惑的是我将返回什么以及我将如何遍历列表。

类似于,在命令式语言中,您将循环遍历每个项并将最大值存储在变量中,我们编写了一个尾部递归函数,编译器将其转换为一个循环

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
List.maxBy
,但理解循环的模拟是它的一个重要部分。

基于给出的理由,我不同意结束这个问题。我看不出它是如何没有重点的,因为这是一个非常简单的问题,需要一个非常简单的解决方案,并且需要关于解决方案的非常具体的细节。它怎么能比这更集中?此外,OP是一个新的贡献者。我同意@BentTranberg。我稍微调整了一下措辞,希望它能重新开放。投票决定重新开放。关闭这是一个错误。为什么要递归?已可用,并在列表为空时抛出。并使用可变变量将找到的最大值保持在该点之前。列表本身使用循环和volatile
acc
变量,因为像
max
min
这样的函数对于所有应用程序来说都是性能关键的。F#中的大多数核心操作在内部使用可变状态,有些使用内联IL。当编译器是自托管的时,这一点非常重要。但是上面的代码被编译器翻译成一个带有可变变量的while循环。F#是一种多范式语言,它不会强迫您编写不可变的代码,但通过具有不可变的语义,您可以获得更安全的代码,并让编译器完成其工作。热点始终可以在以后分析。