SML 用の "いい" ロギング/デバッグ ライブラリはありますか? 一部の Java コードをミラーリングすることを目的とした SML コードをデバッグしています。両方のプログラムが計算中に中間値を出力することに興味があります。私は、このライブラリが C/Java の に似たものを取得することを発見しましprintf()
た。これは大きな助けになります。Java 用の優れたロギング ライブラリはたくさんあるので、問題はないはずです。
ただし、SML に print ステートメントを追加すると、途方もない数のコード行が追加され、一般的に見栄えが悪く、見栄えが悪くなります。これを行う良い方法はありますか?たぶん、Pythonのデコレータのようなものでしょうか?
これが私が言及しているものの例です。ロギングあり:
fun execute (points : Point.t list,
nClusters : int,
threshold : real,
randomPtr : Random.rand,
debug : bool) =
let
(* helper function for debugging *)
fun printIterationInfo (index, points) =
print(genericDebugFmt "\nLoop iteration index: "
index
"\npoints: "
(map Point.featuresRepr points))
val initialClusters = initializeClusters(points, nClusters, randomPtr, debug)
val _ = if debug then
printIterationInfo (~1, initialClusters)
else ()
fun loop (10, clusterCenters) =
if debug then
(printIterationInfo (10, clusterCenters);
clusterCenters)
else
clusterCenters
| loop (index, clusterCenters) =
(* wow, adding logging is cumbersome... *)
let
val ans = work(points, clusterCenters, debug)
in
if debug then
(printIterationInfo (index, ans);
loop (index + 1, ans))
else
loop(index + 1, ans)
end
in
loop (0, initialClusters)
end
end
ロギングなし:
fun execute (points : Point.t list,
nClusters : int,
threshold : real,
randomPtr : Random.rand,
debug : bool) =
let
val initialClusters = initializeClusters(points, nClusters, randomPtr, debug)
fun loop (10, clusterCenters) = clusterCenters
| loop (index, clusterCenters) =
loop(index + 1, ans)
in
loop (0, initialClusters)
end
end