私は関数を書いておきたいと思います。書く前にコードを明確にし、記述(解析)したいと思っています。だからここ コードを書く前に関数を明確に記述する
は私が書きたいの関数である:私はブール行列を持つブール行列を使用して、2つの等価クラスを比較し、2つの等価クラスは、彼らがint
のリストです入力されています。出力は、2つの等価クラスの比較です。
2つのリスト等価クラス比較する条件:
1)ブール行列は、推移閉包
2である)これらの要素は(パスがそれらを接続した)同等である場合、各クラスのすべての要素を確認し、それらを比較する。要素は、別のクラスの0
またはn
要素に接続できます。それらの間に接続がない場合は例外をスローします。
例えば、i
はj
とh
に接続します。 k
とu
は同じ等価クラスにあります。 j
2つの要素は、それらが等しい同じ等価クラス(0
)にある場合k
i -> j -> k <-> u
|
v
h
3)に接続されています。それらはi
からj
へのパスを持っているならば、i < j (-1)
、さもなければi > j (1).
4)各等価クラスは一度だけ表示され、各等価クラスは、少なくとも一つの元素を含みます。ここで
は関数である。
let cmp_classes m c c' =
match c, c' with
| i :: is, j :: js ->
(* when i and j has path *)
if m.(i).(j) = true then compare i j else
(* when i and j don't have path*)
if m.(i).(j) = false then
(* find k in js *)
...
(* check if i and k has path or not, if yes: compare i k; if no: find h in is*)
....
(* find h in is*)
....
(* check if h has path to j or not, if yes: compare h j; if no: check h and k *)
.....
(* check h and k has path or not, if yes: compare h k; if no: there is no path*)
.....
| _ -> assert false
私は良いと明確な記述を持つことで、最初からより多くの機能を信頼できるを書くことができるようにしたいので、私は、あなたが私を助けたいです。どうもありがとうございます。
私は本当に私たちとは思いませんあなたがしようとしていることがわからないため、あなたがしようとしていることを説明するのに役立ちます。 –