値、私は、リスト内の最大値を返す単純な関数を構築します:ここでは最小および/または最大リストが
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
問題:私はk = 0
の両方aux
の機能を初期化します。これは部分的にのみ有効です:負の値がリストにない限り、findMax
は正しく機能します。同様に、findMin
は負の数でのみ正常に機能します。
k
を効率的に初期化するための適切な値は?システム依存の値はありますか?私は以前にそれを計算する必要がありますか?私は間違った側から問題に近づいていますか?
P.S.私はmin
とmax
を見つけるためにライブラリ関数を使用しません。言語の仕組みを学んでいるからです。お待ち頂きまして、ありがとうございます。
先頭の値で再帰を開始するだけではどうですか。それは常に単一の項目リストの最小/最大です。その後、テールを繰り返してください。 – Sean