【发布时间】:2012-06-03 19:28:57
【问题描述】:
我已经声明了一个变量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通过a_to_b生成了这个b_best,也没办法。例如,如果b_best 是bl 中的第四个元素,我认为al 的第四个元素就是我想要得到的。
我不想在函数find_best 中添加更多参数。我的问题是是否有一种传统的方法来定义al 和bl 的类型,以便于从b_best 跟踪a_best,例如,使用array 而不是list?还是转换成array再转换成list回来?
【问题讨论】:
-
顺便说一下,
find_best函数的正确名称应该是argmax: en.wikipedia.org/wiki/Arg_max