OCamlに基づいたいくつかのモジュールをF#に変換しています。コードを変換してF#で実行していますが、F#の最終関数の結果は、OCamlの最終関数の結果と同じではありません。したがって、明らかに、関数呼び出しに従って、どの関数が間違った結果を返しているかを把握する必要があります。
OCamlには、関数の入力と出力をトレースするための優れたトップレベルのディレクティブ、つまり#traceがあります。
F#のデバッグメソッドとトレースメソッドを検索しました。最も近いのは、Trace.Writeメソッドを使用してコードをインストルメント化することですが、メソッドごとに数行かかります。
例えば
オリジナル
let fun001 parm001 =
parm001 * 10
計装
let fun001 parm001 =
// For VS 2010, this trace output will be sent to Output window.
System.Diagnostics.Trace.WriteLine("function001 <--");
System.Diagnostics.Trace.WriteLine(sprintf "%A" parm001);
let result = parm001 * 10
System.Diagnostics.Trace.WriteLine("function001 -->");
System.Diagnostics.Trace.WriteLine(sprintf "%A" result);
result
F#には、検索時に見逃したOCaml #traceと同じ機能がありますか?
答えがノーだと確信しているなら、それが私に必要なすべてです。私は人々が短い答えに眉をひそめることを知っています、しかし答えがノーであるならばそれは私が必要とするすべてです。
編集
結果をキャプチャするとコードが大幅に変更される、より複雑なメソッドの場合
オリジナル
let func001 parm001 parm002 =
match parm001 with
| pattern001 -> func002 parm002
| head :: tail ->
func003 head
func001 tail
| [] -> failwith "failed"
計装
let func001org parm001 parm002 =
match parm001 with
| pattern001 -> func002 parm002
| head :: tail ->
func003 head
func001 tail
| [] -> failwith "failed"
and fun001 parm001 parm002 =
// For VS 2010, this trace output will be sent to Output window.
System.Diagnostics.Trace.WriteLine("function001 <--");
System.Diagnostics.Trace.WriteLine(sprintf "%A, %A" parm001 parm002 );
let result = func001org parm001 parm002
System.Diagnostics.Trace.WriteLine("function001 -->");
System.Diagnostics.Trace.WriteLine(sprintf "%A" result);
result
編集
PostSharpはF#をサポートしていません。参照:F#でのPostSharpの使用-実用的な例を含むドキュメントが必要