Я хотел бы сделать сопоставление с шаблоном списка.
Причина в том, что у меня есть список флагов из переменной Sys.argv, и я хотел бы проверить, все ли флагидействительный.
Список Sys.argv также содержит исполняемый файл и путь в качестве первых двух элементов, которые я игнорирую
У меня есть следующие функции:
let rec compare_element_wise (user_input : string list) (valid_flags: string list) : bool =
match user_input with
| [] -> true
| head::tail -> (List.mem head valid_flags) && (compare_element_wise tail valid_flags)
(*Here print invalid flag if detected*)
let user_input_valid : bool =
let valid_flags = ["-config"; "-module-versions"; "-json"; "-no-logging"; "-out"; "-partial"] in
let user_input = Array.to_list Sys.argv in
if List.length user_input > 2 then
compare_element_wise get_user_flags valid_flags
else true
compare_element_wise возвращает один логическийкоторый указывает, что все флаги действительны, но я также хотел бы распечатать недопустимые флаги, чтобы пользователь знал, что пошло не так. (Get_user_flags - это функция, которая возвращает список с флагами)
Я пытался поместить оператор if else в соответствующую функцию, но, поскольку он рекурсивный, он также выведет все предыдущие флаги в недопустимый флаг.