【问题标题】:Declaring a function without printing the signature [SML]声明函数而不打印签名 [SML]
【发布时间】:2018-11-14 00:50:51
【问题描述】:

是否可以在SML 中声明函数而不打印签名?

我发现您可以通过以下方式打印字符串而不打印 val it = () : unit

val _ = print("Test1");

功能是否可以相同?类似:

val _ = fun foo x = x + 5;
foo 10;

以下程序无法在SML 中编译。 我知道我可以使用let\local,但是我不能在闭包之外使用它们。我也在寻找一种方法,无需导入额外的库。

【问题讨论】:

  • 对于 sml/nj 也有这个答案,不过好像也去掉了提示,我只好稍微修改一下答案,去掉最初的“编译器”。所以语句从“控制”stackoverflow.com/questions/1265171/… 开始
  • @SimonShine 是如何复制的?我什至指出我知道如何在打印时忽略val it = () : unit,并且我想知道如何忽略函数签名。您的建议不包含有关我的问题的任何信息。

标签: sml


【解决方案1】:

您所要求的仅与 REPL 有关,因为函数签名仅打印在 REPL 中。您可以按照您的建议(letlocal 或不透明的struct)在本地范围内定义函数(或其他值声明)来避免显示它们。

一个小技巧是连续多次重新定义会产生最新的定义,但最后你仍然需要一个。

如果您想在代码中重用某个值而不需要 REPL 打印它,也许您希望完全禁用 REPL 声明输出,或者运行已编译的二进制文件?

Moscow ML 中,您可以运行 REPL 而无需声明输出

mosml -quietdec file.sml

但是对于 SML/NJ 和其他我不知道的情况。

【讨论】:

  • 在一个重复的问题中有一个 SML/NJ 的答案(在评论中链接到原始问题),我有没有机会说服你在那里添加你的 mosml 解决方案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多