Мне нужно определить матрицу int как тип. Столбец или строка матрицы представляют city
, элемент в матрице представляет distance
между городом строки и городом столбца. Размерность матрицы может измениться (мы можем добавить или удалить города), но она всегда довольно мала.Определить матрицу int с массивом, списком или картой в OCaml?
стесняется среди int array array
, int list list
и типа с map
, которая определяется следующим образом:
module MatOrd = struct
type t = string * string
let compare ((a, b): string * string) ((c, d) : string * string) =
if Pervasives.compare a c <> 0
then Pervasives.compare a c
else Pervasives.compare b d
end
module MatMap = Map.Make(MatOrd)
Тогда int MatMap.t
может представлять собой матрицу Int. Преимущество этого определения заключается в том, что я могу написать название города как координату матрицы. Wherease for int array array
и int list list
, кажется, что я должен запомнить наизусть координаты наизусть ...
Кроме того, правда ли, что мы не можем сопоставлять шаблоны с массивом? Например, мы не можем написать:
match a_array with
[| first_element; the_rest_elements |] -> ...
С преимуществами и недостатками, которые я упоминал или нет, какой тип вы предлагаете?
Вы не можете написать 'match a_array с [| first_element; the_rest_elements |] -> ... ', потому что это не так, как вы обращаетесь к элементам массива. 'the_rest_elements' не существует в памяти и не имеет типа в системе типов. Но вы вполне можете справиться с сопоставлением шаблонов с массивами. –