【问题标题】:How to create an empty environment represented by a function如何创建一个由函数表示的空环境
【发布时间】:2018-08-16 09:39:40
【问题描述】:

我在网上遇到了这个我觉得很有趣的问题,它有一个不错的解释,但我对解决方案感到困惑。所以给定

type 'a fenv = name -> 'a 

创建一个类型的值

'a fenv

这将是我们的空环境。我认为这是以下内容

exception NotFound of name
val empty = fn name => raise NotFound name

它可能会返回 Notfound 名称异常,但我可能做错了,因为我继续得到 ​​p>

Type clash: expression of type
   'a alist -> 'a alist alist
cannot have type
   'a alist alist
Toplevel input:
val (_: 'a fenv) = empty
Unbound type constructor: fenv

对不起,如果这在 sml 中仍然很简单,有人可以解释一下我将如何获得解决方案吗?

谢谢

【问题讨论】:

  • 如果您发布实际代码而不是“...”,您将获得更好的帮助。 empty 的简单实现应该可以工作。你可能想多了,或者使用它的代码有问题。
  • 我的错它被编辑了
  • 看起来问题出在其他地方。编译器应该告诉你有问题的表达式在哪里。 (我怀疑你忘记在某处应用函数。)
  • 在尝试使用以下 val _ 进行另一种测试后,我更新了错误消息:'a fenv = fenvEmpty.所以我调用异常没有错?
  • 那是书中写的测试用例,所以我认为它是正确的。仔细检查道歉,但它是 val (_: 'a fenv) = empty

标签: sml ml mosml


【解决方案1】:

如何创建一个函数表示的空环境

你可以这样做:

type name = string
exception NotFound of name
fun empty name = raise NotFound name

我可能做错了,因为我继续得到

Type clash: expression of type
   'a alist -> 'a alist alist
cannot have type
   'a alist alist

你确实意识到你的代码没有提到'a alist,对吧?您可能使用的 REPL 对 type 'a fenv 的定义已过时,或者您的文件包含多个定义,一个涉及此 'a alist,另一个包含此 'a fenv em>。

【讨论】:

  • 谢谢西蒙,我什至没有想到这一点,通过我自己的实现,我认为这可能是问题
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
相关资源
最近更新 更多