【发布时间】:2023-04-04 06:37:02
【问题描述】:
我有一个多级优先级队列,它被实现为 (level:int, priority:int, 'a) 的列表。数据类型如下所示:
datatype 'a queue = NONE | Q of (int * int * 'a) list;
较低级别的元素位于队列的前面。同一级别的元素按优先级排序。我有一个入队函数
所以,如果现有队列是:val a = Q [(3,2,"c"),(3,2,"d"),(5,2,"b"),(5,3,"a")],
然后,将 1 5 "e" 排入队列
给了
val a = Q [(1,5,"e"),(3,2,"c"),(3,2,"d"),(5,2,"b"),(5,3,"a")]
我必须编写一个函数 move ,它对谓词 p 进行操作,它将所有满足谓词 p 的元素移动到 q 内的较低级别的队列中。 那就是: val move : ('a -> bool) -> 'a queue -> 'a queue 下面的定义是行不通的。
fun move pred (Q((l,p,v)::xs)) = if (pred (v)) then enqueue (Q xs) (l-1) p v else (move pred (Q xs))
| move pred (Q[]) = raise Empty
我刚开始学习 sml。请帮忙。
【问题讨论】:
标签: functional-programming queue priority-queue sml smlnj