【问题标题】:SML - Creating dictionary that maps keys to valuesSML - 创建将键映射到值的字典
【发布时间】:2013-01-08 13:45:39
【问题描述】:

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

    type dict = string -> int option

例如,这里是空字典:

    val empty : dict = fn key => NONE

这是我对插入函数的实现:

    fun insert (key,value) d = fn d => fn key => value

但这是错误的类型,我需要的是插入:(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

【问题讨论】:

    标签: function dictionary key sml


    【解决方案1】:

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

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

    当您提供keyvalue 和字典d 时,您想取回一个新字典d'。因为dictstring -> int option,所以d' 是一个函数,接受string 并返回int option

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

    这里是直译:

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

    【讨论】:

      猜你喜欢
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 2021-08-02
      • 1970-01-01
      • 2020-03-01
      • 2017-07-07
      相关资源
      最近更新 更多