Я объявила переменную al : 'a list
, функцию a_to_b : 'a -> 'b
и функцию score : 'b -> int
. Затем let bl = List.map a_to_b al in ...
в следующем коде определяет bl : 'b list
.Определить тип 2 соответствующих наборов
let find_best (bl : 'b list) : 'b =
let score_best, b_best = List.fold_left
(fun (score_old, b_old) b_new ->
let score_new = score b_new in
if score_old < score_new then
(score_new, b_new) else
(score_old, b_old))
(score (List.hd bl), List.hd bl) bl in
b_best
let bl = List.map a_to_b al in
find_best bl
Этот фрагмент кода находит b_best
таким образом, что его score
является наибольшей. Но одна из моих потребностей - это то, что я также хочу знать, что a_best
генерирует это b_best
через a_to_b
, и нет способа. Например, если b_best
является 4-м элементом в bl
, я считаю, что 4-й элит из al
- это то, что я хочу получить.
Я не хочу добавлять дополнительные параметры к функции find_best
. Мой вопрос заключается в том, есть ли обычный способ определить тип al
и bl
, чтобы упростить отслеживание a_best
от b_best
, например, используя array
вместо list
? или конвертировать в array
, а затем конвертировать в list
назад?
Кстати, правильное имя функции 'find_best' было бы' argmax': http://en.wikipedia.org/wiki/Arg_max –