val compare : bool array array -> 'a list -> 'a list -> int
比较m生成列表上的词典顺序。我不知道如何填写???
let rec compare m c c' =
match c with
| [] -> (match c' with
| [] -> 0
| _ :: _ -> -1)
| hd1 :: tl1 -> (match c' with
| [] -> 1
| hd2 :: tl2 -> ???
这是我试图在一个int列表中执行的功能。但是这个功能不满足,它仍然缺少检查列表的其余部分。
let cmp_classes m c c' =
match c, c' with
| i :: _, j :: _ ->
begin
match m.(i).(j), m.(j).(i) with
(* same class: there is a path between i and j, and between j and i *)
| true, true -> 0
(* there is a path between i and j *)
| true, false -> 1
(* there is a path between j and i *)
| false, true -> -1
(* i and j are not compareable *)
| false, false -> 0
end
| _ -> assert false
你能帮帮我吗?因为当我在int 中尝试使用此函数时
let cmp_classes m i j =
match m.(i).(j), m.(j).(i) with
(* same class: there is a path between i and j, and between j and i *)
| true, true -> 0
(* there is a path between i and j *)
| true, false -> 1
(* there is a path between j and i *)
| false, true -> -1
(* i and j are not compareable *)
| false, false -> 0
它仍然没有在我测试的数据中返回正确的顺序。 我一直在做这个功能很多次,当我不得不一次又一次地尝试但却没有发现什么是错的时候它真的被卡住了。拜托我需要你的帮忙。谢谢
答案 0 :(得分:3)
(* i and j are not compareable *)
| false, false -> 0
如果你试图对你的元素进行拓扑排序,这是完全错误的。你说无比的元素是等于完全无意义的,并且会混淆排序算法。
如果您想拥有真正的拓扑订单,请按以下步骤操作:
根据您使用的数据结构,此算法的效率可能更高或更低,但您的问题不足以让我告诉您更多信息。