Спасибо за очень плодотворный ответ, который я получил от моего предыдущего вопроса На вопрос о типе возврата, списке и структуре данных в OCaml . У меня есть еще один вопрос, связанный с этой темой, но я думаю, что было бы хорошо задать новый вопрос.
Вот функция (order_xsds
), которую я использовал для вычисления и сортировки всех классов эквивалентности. Потому что я хочу использовать эту функцию для сортировки своих данных, поэтому я переношу ее в тип данных (Мои данные - это тип xsd).
val flatten : Xsd.xsd list -> Xsd.xsd list
val transClosure : 'a array array -> 'a array array
let name_of_num (l: 'a list) (i: int) : 'a = List.nth l i;;
let order_xsds xsds =
let flatten_xsds = flatten xsds in
let xsds_matrix = matrix_of_dependencies flatten_xsds in
let tc = transClosure xsds_matrix in
let eq_classes_order = sort_eq_classes tc (eq_classes tc) in
let xsds_of_ints = List.map (List.map (name_of_num flatten_xsds)) in
let xsds_order = xsds_of_ints eq_classes_order in
xsds_order;;
Я пытаюсь написать функцию, которая печатает вывод отсортированного списка.
val genr_type : Buffer.t -> Xsd.xsd -> unit
let rec genr_and_types b = function
| [] -> ()
| xsd :: xsds ->
bprintf b "\n\nand %a%a" genr_type xsd genr_and_types
(List.flatten (order_xsds xsds));;
let genr_types b = function
| [] -> assert false (* there is at least one builtin type *)
| xsd :: xsds ->
bprintf b "type %a%a" genr_type xsd genr_and_types
(List.flatten (order_xsds xsds))
Я позвонил List.flatten
только потому, что исправил проверенный тип OCaml, но я теряю информацию о отсортированных классах эквивалентности, что дает мне неправильный ответ.
Я попробовал другую функцию, берущую список списков xsds, используя вложенный List.iter.
let rec genr_types b xsds= List.iter (fun xsd ->
List.iter (fun xsds -> bprintf b "\n\nand %a%a" genr_type xsd
genr_types (order_xsds xsds)) xsds)(List.flatten xsds);;
Когда я запускаю, моя программа не может сгенерировать результат, похоже, он не завершается.
Я пытаюсь выяснить, как распечатать результат из функции "order_xsds" (val: список Xsd.xsd -> список Xsd.xsd).
Но я все еще застрял. Мне нужна твоя помощь, чтобы объяснить мне, как идти с этой проблемой.
Спасибо за вашу помощь,
G