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

时间:2013-01-24 17:47:17

标签: 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

但这是错误的类型,我需要的是insert:(string * int) - > 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

1 个答案:

答案 0 :(得分:2)

您可以对该功能的签名进行推理:

val insert = fn: (string * int) -> dict -> dict

当您提供keyvalue和字典d时,您希望返回新字典d'。由于dictstring -> int optiond'是一个函数需要string并返回int option

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

以下是字面翻译:

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