在练习时,我构建了一个简单的函数,它返回列表中的最大值:
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。我不使用库函数来查找min
和max
,因为我正在学习该语言的机制。谢谢你的耐心。
答案 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)