sml - 机器学习抽象数据类型

标签 sml ml abstract-data-type

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

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

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

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

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

最佳答案

这就是仿函数的用武之地:您编写一个由它使用的队列参数化的模块:

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

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

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

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

关于sml - 机器学习抽象数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30551860/

相关文章:

sml - 使用前定义类型

ocaml - 带元组的 let-in 表达式的求值顺序

functional-programming - StandardML 中的 y 组合器

tree - OCaml 未绑定(bind)值

f# - f# 中函数定义的哪种风格更好?

haskell - 我可以抽象地导入非抽象类型吗?

java - Java 中的所有 ADT 都需要迭代器吗?

java - 对 1,000,000 个对象进行排序(不按键)- Java

string - 在 SML 中使用 foldr 连接字符串

closures - 函数闭包与延续,一般和 SML