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_best
a_to_b
b_best
bl
al
関数にこれ以上パラメーターを追加したくありませんfind_best
。私の質問は、たとえば、の代わりに?を使用して、からトレースしやすくするために、 al
andの型を定義する従来の方法があるかどうかです。または変換してから元に戻す?bl
a_best
b_best
array
list
array
list