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最大のものを見つけます。しかし、私のニーズの 1 つは、を介してこれをa_best生成する方法も知りたいということです。方法はありません。たとえば、 が の 4 番目の要素である場合、取得したいのはの 4 番目の要素であると考えます。b_besta_to_bb_bestblal
関数にこれ以上パラメーターを追加したくありませんfind_best。私の質問は、たとえば、の代わりに?を使用して、からトレースしやすくするために、 alandの型を定義する従来の方法があるかどうかです。または変換してから元に戻す?bla_bestb_bestarraylistarraylist