есть часть ocaml, которая работает правильно
type position = {symbol: string; holding: int; pprice : float; };;
type account = {name: string; max_ind_holding:float; pos:position list};;
let print_position pos = print_string "Holding: "; print_int pos.holding;
print_string ( " " ^ pos.symbol ^ "@" );
print_float pos.pprice;
print_newline( );;
let print_account acct = print_string ( "Account_ID " ^ acct.name );
print_newline( );
List.iter print_position acct.pos;;
(*MAIN PART OF CODE *)
let hashtbl_function db =
let hash_tbl_fold = Hashtbl.fold ( fun x y z -> ( ( y ) :: z ) ) db [] in
( fun x -> List.iter print_account x ) hash_tbl_fold (* THIS WORKS FINE *)
;;
Но, если я захочу изменить последний, как сделать итерацию «списка позиций» в этой функции (не в print_account), я получу ошибку:
let hashtbl_function db =
let hash_tbl_fold = Hashtbl.fold ( fun x y z -> ( ( y ) :: z ) ) db [] in
( fun x -> List.iter print_position x ) hash_tbl_fold.pos (* Why this doesn't work ???*)
;;
Ошибка: это выражение имеет тип 'список, но здесь используется с типом account
Но hash_tbl_fold.pos - это список позиций, это нетип аккаунта.Правильно?
В print_account - acct.pos (чтобы получить список) - это работа, но в hashtbl_function hash_tbl_fold.pos -> not.
Как это может быть, то же выражениеработает только в одной из функций?Как я могу перебрать 'список позиций' в hashtbl_function?
заранее спасибо!