我已经声明了一个变量al : 'a list、一个函数a_to_b : 'a -> 'b和一个函数score : 'b -> int。然后let bl = List.map a_to_b al in ...在下面的代码中定义bl : 'b list.
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生成的,没有办法。例如,如果是 中的第 4 个元素,我认为第4 个元素就是我想要得到的。b_besta_to_bb_bestblal
我不想在函数中添加更多参数find_best。我的问题是,是否有一种传统的方法来定义 and 的类型al,bl以便于追踪a_best,b_best例如,使用array而不是list?或转换为array然后转换list回?