Function SML-创建将键映射到值的字典

Function SML-创建将键映射到值的字典,function,dictionary,key,sml,Function,Dictionary,Key,Sml,我需要用sml创建一个字典,但是我在使用插入函数时遇到了极大的困难 type dict = string -> int option 例如,以下是空字典: val empty : dict = fn key => NONE 以下是我对插入函数的实现: fun insert (key,value) d = fn d => fn key => value val insert = fn: (string * int) -> dict -&g

我需要用sml创建一个字典,但是我在使用插入函数时遇到了极大的困难

    type dict = string -> int option
例如,以下是空字典:

    val empty : dict = fn key => NONE
以下是我对插入函数的实现:

    fun insert (key,value) d = fn d => fn key => value
val insert = fn: (string * int) -> dict -> dict
但这是错误的类型,我需要的是插入:(string*int)->dict->dict。 我搜索了从惰性函数到实现字典的所有内容。 任何帮助或指导都将不胜感激

如果您仍然对我试图实现的内容感到困惑,那么我起草了调用简单查找函数时应该得到的内容

    fun lookup k d = d k

    - val d = insert ("foo",2) (insert ("bar",3) empty);
    val d = fn : string -> int option
    - lookup2 "foo" d;
    val it = SOME 2 : int option
    - lookup2 "bar" d;
    val it = SOME 3 : int option
    - lookup2 "baz" d;
    val it = NONE : int option

您可以根据函数的签名进行推理:

    fun insert (key,value) d = fn d => fn key => value
val insert = fn: (string * int) -> dict -> dict
当您提供
和字典
d
时,您希望取回一本新字典
d'
。由于
dict
string->int选项
d'
是一个函数,它接受
字符串
,并返回
int选项

假设您为该函数提供了一个字符串
s
。有两种情况可能发生:当
s
key
相同时,返回相关值,否则通过使用key
s
查找
d
返回值

以下是直译:

fun insert (key, value) d = fn s => if s = key then SOME value
                                    else d s