Sml 如何创建由函数表示的空环境

Sml 如何创建由函数表示的空环境,sml,ml,mosml,Sml,Ml,Mosml,我在网上遇到了这个问题,我觉得很有趣,它有一个像样的解释,但我对解决方案感到困惑。如此给定 type 'a fenv = name -> 'a 创建类型为的值 'a fenv 那将是我们的空环境。我认为这是以下几点 exception NotFound of name val empty = fn name => raise NotFound name 它可能会返回Notfound名称异常,但我可能做得不对,因为我继续 Type clash: expression of ty

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

type 'a fenv = name -> 'a 
创建类型为的值

'a fenv
那将是我们的空环境。我认为这是以下几点

exception NotFound of name
val empty = fn name => raise NotFound name
它可能会返回Notfound名称异常,但我可能做得不对,因为我继续

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还是个新问题,有人能解释一下我将如何获得解决方案吗

谢谢

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

你可以做:

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

你知道你的代码没有提到“一个主义者”,对吧?您可能使用的REPL类型“a fenv”的定义已过时,或者您的文件包含多个定义,一个包含此“a列表”,另一个包含此“a fenv”。

如果您发布实际代码而不是….您将获得更好的帮助。。。。empty的琐碎实现应该可以工作。你可能想得太多了,或者使用它的代码有问题。我的错是它被编辑了,看起来问题出在别处了。编译器应该告诉您有问题的表达式在哪里。我怀疑您忘了在某个地方应用函数。在尝试用以下val_u2;测试错误消息后,我更新了错误消息:“a fenv=fenvEmpty。所以我调用异常没有错?这是书中写的测试用例,所以我认为它是正确的。双重检查道歉,但它是val uv:'a fenv=emptyThanks Simon我甚至没有想到这一点,按照我自己的实现,我确实认为这可能是问题所在