最低和/或最高列表值

时间:2017-11-06 13:34:47

标签: f#

在练习时,我构建了一个简单的函数,它返回列表中的最大值:

let rec findMax =        // Find maximum value in list
fun l ->
    let rec aux =
        fun l k ->
            match l with  
            | []                ->  k
            | x::xs             ->  if x >= k   then  aux xs x
                                    else aux xs k
    aux l 0

与此同时,我构建了一个类似的函数来查找列表中的最小元素:

let finMin =        //Find smallest value in list
fun l ->
    let rec aux =
        fun l k ->
            match l with
            | []        ->  k
            | x::xs     ->  if x <= k   then    aux xs x
                            else aux xs k
    aux l 0

问题在于:我使用aux初始化了两个k = 0函数。它只是部分正常:只要列表中没有负值,findMax就能正常工作。同样,findMin仅适用于负数。

有效初始化k应该是什么值?是否存在依赖于系统的价值?我以前应该计算吗?我是从错误的一方接近问题了吗?

P.S。我不使用库函数来查找minmax,因为我正在学习该语言的机制。谢谢你的耐心。

2 个答案:

答案 0 :(得分:4)

它应该是System.Int32.MaxValue,但请注意,您应该System.Int32.MinValue使用findMax,以使其与否定值一起使用。

答案 1 :(得分:3)

您可以将列表中的第一项作为最小值或最大值,然后按照您的要求逐步减少列表的其余部分。例如:

18 def on_enter(instance):
19     print('User pressed enter in', instance.text, instance.id, instance.tab_width) 
          ...
205        textinput = TextInput(id="myID", text='Hello world', multiline=False)
206        textinput.bind(on_text_validate=on_enter)