我有一种形式的数据类型:
datatype 'a mlqueue = N | Q of (int * int * 'a) list;
我必须编写一个出列函数
val dequeue : 'a mlqueue -> 'a * 'a mlqueue*
所以如果我的队列是:
val q = Q [(0,0,3),(1,0,4),(1,1,2),(2,0,5),(2,1,6),(2,2,1)];
- dequeue q;
val it = (4,Q [(1,1,2),(2,0,5),(2,1,6),(2,2,1)]) : int * int mlqueue
这是我的问题:
fun dequeue (Q []) = raise Empty | dequeue (Q((l,p,v)::xs)) = (v, Q xs);
这种形式的函数不会修改原始队列,当我第二次调用dequeue时,它会提供与第一次相同的输出。
有人可以帮忙告诉我如何写这个功能吗?