代码之家  ›  专栏  ›  技术社区  ›  Andrew Keeton ShuggyCoUk

如何在标准ML中打印多态值?

  •  6
  • Andrew Keeton ShuggyCoUk  · 技术社区  · 17 年前

    是否有一种方法可以打印标准ML中的多态值(特别是SML/NJ)?我有一个多态函数,它并没有做我想要的事情,这是由于SML中调试的糟糕状态(参见 Any real world experience debugging a production functional program? ),我想看看它和一些好的ol' print 是的。一个简单的例子是(在提示下):

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

    欢迎提出其他建议。在此期间,我会一直盯着那些有问题的代码提交。

    我能够找到这个bug,但这个问题仍然存在,希望能防止将来的痛苦和折磨。

    2 回复  |  直到 9 年前
        1
  •  8
  •   Norman Ramsey    17 年前

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

    • show 作为函数的附加参数。例如,如果您的多态函数具有类型

      'a list -> 'a list
      

      您可以将类型扩展到

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

      你用 内部打印,然后将该功能部分应用于合适的 显示

      这很乏味,但确实有帮助。(但请注意:这可能会驱使你尝试Haskell。)

        2
  •  0
  •   David Hanak    17 年前

    仅在MOSML中 :仅出于调试目的,请使用 printVal

    编辑 :在这种情况下,恐怕没有通用的解决方案,您需要将值显式转换为字符串,然后打印这些字符串。关于好的建议,请参见其他答案。