У меня есть функция, которая принимает (int * int list) list
к логической матрице. Я проверил мой контрпример, и он дал мне правильный ответ. Как код ниже.
let to_matrix l =
let n = List.length l in
let m = Array.make_matrix (n + 1) (n + 1) false in
List.iter (fun (i, j) ->
List.iter (fun t ->
m.(i).(t) <- true) j) l;
m;;
let ex = to_matrix [(0, [1; 0]); (1, [0]); (2, [1])];;
Это дает мне матрицу:
true true false false
true false false false
false true false false
false false false false
Я должен проверить это на моих реальных данных, это список xsds, как скрипт данных ниже. Например:
[Elt ("name", Some (SimpleType "string"), 1, Bound 1);
Group ("label",
Some
(Choice
[Elt ("numberLabel",
Some
(Sequence
[Elt ("number", Some (SimpleType "nonNegativeInteger"), 0,
Unbounded)]),
1, Bound 1);
Elt ("symbolLabel",
Some (Sequence [GroupRef ("name", 0, Unbounded)]), 1, Bound 1)]),
1, Bound 1)]
РЕДАКТИРОВАТЬ:
Спасибо за ответ от Томаса.
Я пропустил объяснение о типе, который я возвратил после прохождения этих деревьев.
Тип после хода выглядит следующим образом:
[("name"; ["string"]); ("label"; ["nonNegativeInteger"; "name"]) ...]
Из этого списка xsds я хотел бы представить булеву матрицу, чтобы показать зависимость между ними, например: имя типа зависит от типа строки; тип
метка зависит от типа nonNegativeInteger и имени.