6

有没有办法在标准 ML(特别是 SML/NJ)中打印多态值?我有一个多态函数没有做我想要的,并且由于在 SML 中调试的糟糕状态(请参阅调试生产功能程序的任何真实世界经验?),我想看看它在做什么旧print的。一个简单的例子是(在提示下):

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

其他建议表示赞赏。与此同时,我将继续盯着有问题的代码提交。

更新

我能够找到错误,但问题仍然存在于防止未来痛苦和痛苦的希望中。

4

2 回答 2

8

不,没有办法打印多态值。你有两个选择:

  • 将您的函数专门用于易于打印的整数或字符串。然后当 bug 被杀死时,再次使其成为多态。

  • 如果错误仅在某些其他实例化时出现,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 回答