【问题标题】:ML abstract data type机器学习抽象数据类型
【发布时间】:2015-05-30 22:08:29
【问题描述】:

我正在尝试在标准 ML 中使用抽象数据类型。例如,我可以写一个签名队列,通过定义两个结构为队列来实现两个队列:

signature Queue = ...
structure AQueue :> Queue = ...
structure BQueue :> Queue = ...

现在我想为队列编写通用函数/值,我使用哪个队列(AQueue 或 BQueue)并不重要。例如,我想写如下:

val double1 = Queue.enqueue (1, Queue.enqueue (1, Queue.empty))

我想我应该在某处提及 Queue.queue 类型(假设它在签名 Queue 中这样命名)......我应该打开 Queue 吗?这可以做到吗?这似乎应该是 ADT 的常见情况,但我不知道在哪里阅读......我发现的只是如何定义签名/结构,而不是如何使用它们。

【问题讨论】:

    标签: sml ml abstract-data-type


    【解决方案1】:

    这就是 functors 发挥作用的地方:您编写一个模块,由它使用的队列参数化:

    functor Client(Queue : QUEUE) =
    struct
      val double1 = Queue.enqueue (1, Queue.enqueue (1, Queue.empty))
      ...
    end
    

    然后您可以使用特定的队列实现选择来实例化这个模块:

    structure AClient = Client(AQueue)
    structure BClient = Client(BQueue)
    

    顺便说一句,签名名称通常全部大写,以区别于结构。

    【讨论】:

      猜你喜欢
      • 2020-05-25
      • 2021-07-07
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 2012-09-26
      • 2016-04-20
      • 1970-01-01
      • 2017-06-21
      相关资源
      最近更新 更多