유형으로 int 행렬을 정의해야합니다. 행렬의 행 또는 행은 city
을 나타내며 행렬의 요소는 행 도시와 열 도시 사이의 distance
을 나타냄니다. 행렬의 크기가 변경 될 수 있지만 (도시를 추가하거나 제거 할 수 있음) 항상 작습니다.OCaml에서 배열,리스트 또는 맵으로 int 행렬을 정의 하시겠습니까?
난 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의 행렬을 나타낼 수있다. 이 정의의 장점은 도시의 이름을 매트릭스의 좌표로 직접 쓸 수 있다는 것입니다.
int array array
과
int list list
이있는 경우에는 좌표계의 의미를 암기해야 할 것 같습니다 ...
게다가 배열과 패턴 매칭을 할 수없는 것은 사실입니까? 예를 들어, 우리는 쓸 수 없습니다 : 장점과 내가 언급 단점 여부와
match a_array with
[| first_element; the_rest_elements |] -> ...
당신은 어떤 유형을 제안합니까?
당신은'match a_array with [| first_element; the_rest_elements |] -> ...'이것은 배열의 요소에 접근하는 방식이 아니기 때문입니다. 'the_rest_elements'는 메모리에 존재하지 않으며 타입 시스템에 타입도 없습니다. 하지만 배열과 패턴 매칭을 완벽하게 수행 할 수 있습니다. –