6

Standard ML(具体的にはSML / NJ)でポリモーフィック値を印刷する方法はありますか?私は自分が望むことをしていないポリモーフィック関数を持っていて、SMLでデバッグしているひどい状態のために(実稼働関数型プログラムをデバッグする実際の経験はありますか?)、それがいくつかの良いことで何をしているのかを見たいです- ol' print's。簡単な例は(プロンプトで)次のようになります。

fun justThisOnce(x : 'a) : 'a = (print(x); x);
justThisOnce(42);

他の提案をいただければ幸いです。それまでの間、問題のあるコードをじっと見つめて提出します。

アップデート

私はバグを見つけることができましたが、将来の痛みや苦しみを防ぐことを期待して、質問はまだ残っています。

4

2 に答える 2

8

いいえ、多態的な値を出力する方法はありません。次の 2 つの選択肢があります。

  • 関数を整数または文字列に特化して、簡単に出力できるようにします。次に、バグが殺されたら、再びポリモーフィックにします。

  • バグが他のインスタンス化でのみ現れる場合はshow、追加の引数として関数に渡します。たとえば、多相関数に型がある場合

    'a list -> 'a list
    

    タイプを拡張します

    ('a -> string) -> 'a list -> 'a list
    

    show内部で使用して印刷し、その関数を適切なshowに部分的に適用することで、元のコンテキストで使用できるバージョンを取得できます。

    とても面倒ですが、役に立ちます。(ただし、注意してください: Haskell を試してみたくなるかもしれません。)

于 2009-03-31T01:14:23.407 に答える
0

MOSMLのみ:デバッグ目的でのみ、このprintVal関数を使用してください。この関数はトップレベルモードでのみ使用可能であることに注意してください。プログラムをコンパイルしようとするとエラーが発生します。

編集:その場合、一般的な解決策はないのではないかと思います。値を明示的に文字列に変換し、それらを出力する必要があります。良い提案については、他の回答を参照してください。

于 2009-03-30T06:02:36.123 に答える