Queue 如何在ml中排队

Queue 如何在ml中排队,queue,ml,Queue,Ml,我正在用ml编写一个程序,我试图创建一个由整数元组组成的队列,但它不起作用!这是我的密码 let val fif1 = Queue.mkQueue (() ,() ) in #2 (bfs1 (array1, 0, n, Queue.enqueue (fif1 , (c,0) ) )) end 其中c是一个整数。 编译器错误如下: Error: operator and operand don't agree [type mismatch] operator domain: {

我正在用ml编写一个程序,我试图创建一个由整数元组组成的队列,但它不起作用!这是我的密码

let     
val fif1 = Queue.mkQueue (() ,()  )
in #2 (bfs1 (array1, 0, n, Queue.enqueue (fif1 , (c,0) ) ))
end  
其中c是一个整数。 编译器错误如下:

Error: operator and operand don't agree [type mismatch]
operator domain: {2:'Y; 'Z}
operand:         square array * 'X * int * (int * int) Queue.queue
               -> square array * int * int * (int * int) Queue.queue
in expression:
(fn {2=2,...} => 2) bfs1

任何帮助都会非常有用!提前谢谢

我假设您正在使用

简单地说,这是可变队列的实现。签名提供构造函数
mkQueue
,其类型为
unit->'a queue
。您正在使用类型为
unit*unit
的值调用
mkQueue

Queue.mkQueue ((), ())
无论您想要什么类型的队列,都应该只使用
()
调用
mkQueue
。下面是一个示例,它创建了一个新队列,并向其中添加了两对整数:

构造队列(由于值限制,我不得不在REPL处添加一个类型注释,您可能不必在编译的源文件中这样做,我不确定)

然后再加上两件事:

val _ = ( Queue.enqueue (q, (1, 2))
        ; Queue.enqueue (q, (3, 4)))
将其取出,将模式与常量匹配,以确认其工作正常:

val (1, 2) = Queue.dequeue q
val (3, 4) = Queue.dequeue q
您的错误消息让我有点困惑,看起来您试图从函数
bfs1
中应用
#2
(从元组中选择第二个元素),这当然不是元组。但是您的代码被正确地插入了括号,所以我想知道您是否加载了导致该消息的一些旧代码

尝试在一个新的REPL中加载下面的代码,以及您的其余代码(即,完全停止SML/NJ进程,并用您的代码启动一个新的进程)。尽管有一些代码缺失,但这对我来说很难(变量
c
n
array1
bfs1


我想你是在用电脑吧

简单地说,这是可变队列的实现。签名提供构造函数
mkQueue
,其类型为
unit->'a queue
。您正在使用类型为
unit*unit
的值调用
mkQueue

Queue.mkQueue ((), ())
无论您想要什么类型的队列,都应该只使用
()
调用
mkQueue
。下面是一个示例,它创建了一个新队列,并向其中添加了两对整数:

构造队列(由于值限制,我不得不在REPL处添加一个类型注释,您可能不必在编译的源文件中这样做,我不确定)

然后再加上两件事:

val _ = ( Queue.enqueue (q, (1, 2))
        ; Queue.enqueue (q, (3, 4)))
将其取出,将模式与常量匹配,以确认其工作正常:

val (1, 2) = Queue.dequeue q
val (3, 4) = Queue.dequeue q
您的错误消息让我有点困惑,看起来您试图从函数
bfs1
中应用
#2
(从元组中选择第二个元素),这当然不是元组。但是您的代码被正确地插入了括号,所以我想知道您是否加载了导致该消息的一些旧代码

尝试在一个新的REPL中加载下面的代码,以及您的其余代码(即,完全停止SML/NJ进程,并用您的代码启动一个新的进程)。尽管有一些代码缺失,但这对我来说很难(变量
c
n
array1
bfs1