2017-09-18 3 views
0

結果を返す前に、結果のすべての要素をログに記録したいと思います。それを達成する方法はありますか?リストを返す前にOcamlでリストのすべての要素を記録するにはどうすればいいですか?

let calculate ~size_of_experiment:s ~number_of_buckets:n = 
    let results = run_experiments s n in 
    List.iter (fun x -> print_endline x) results; 
    List.fold_left (fun x y -> x + (snd y)) 0 results 

上記のコードはコンパイルされません:

Error: This expression has type (int * int) list 
     but an expression was expected of type string list 
     Type int * int is not compatible with type string 

答えて

1

あなたの唯一の問題は、リストの要素がタイプ(int * int)のものであり、あなたが文字列としてそれらを扱っているということのようです。

let string_of_int_pair (a, b) = Printf.sprintf "(%d, %d)" a b 

let calculate ~size_of_experiment:s ~number_of_buckets:n = 
    let results = run_experiments s n in 
    List.iter (fun x -> print_endline (string_of_int_pair x)) results; 
    List.fold_left (fun x y -> x + (snd y)) 0 results 

より一般的な問題は、それぞれの場合にコードを自分で記述することなく、さまざまな型の値を出力する方法があることが本当にうれしいということです。そのためには、derivingのようなものを使用できます。

+0

ありがとう@jeffrey私はOcamlについてのこの詳細を完全に忘れてしまった。 – Istvan

関連する問題