2017-02-15 3 views
2

int리스트가 [1; 2; 3][4; 3; 5]이라고 가정합니다. 각 숫자는 숫자입니다. [1; 2; 3] < [4; 3; 5];;true로 평가하면서,
[1; 2; 3] > [4; 3; 5];;false로 평가
을 : OCaml의 주위에 재생목록의 정수 또는 부동 소수점 값을 안정적으로 비교하는 방법은 무엇입니까?

나는 것을 알 수있다.

서로 다른 길이의 목록으로

...
[4; 5] > [1;2;3][4; 5] > [1;9;3] 이상한 인 TRUE로 평가.

각 개별 요소를 비교하는 것처럼 보이고 한 쌍이 부등호를 만족하지 않으면 false을 반환하지만 목록의 길이가 같지 않으면 비교할 수 있고 무시할 수있는 해당 요소 만 비교합니다 나머지.

그러나 목록 모듈과 퍼베이시브 모듈을 확인하고 정확하게이 기능의 작동 방식을 지정하는 설명서를 찾을 수 없습니다.

누군가 내가 이미 추측 한 내용을 명백하게 확인하거나 추가하거나 모순 할 수 있습니까?

답변

4

단순한 값 목록 (정수 및 문자)의 경우 다형 비교에서는 "사전 식 순서"가 사용됩니다. 사전의 단어 순서와 비슷합니다. 본질적으로 목록의 시작 부분에서 시작하여 해당 요소가 다를 때까지 비교합니다. 그런 다음 비교는 두 개의 다른 요소의 순서에 따라 달라집니다. 한 목록의 끝 부분에 도달하기 전에 다른 목록 앞에 도달하면 (짧은 지점까지) 짧은 목록이 길어집니다. 그 시점까지 두 목록의 끝에 도달하면 (그 점까지 차이점 없음) 목록은 동일합니다.

동일한 규칙 집합에 따라 "the"는 사전에서 "then"앞에 나타나고 "them"다음에 "then"이 나타납니다. OCaml리스트 ['t'; 'h'; 'e'], ['t'; 'h'; 'e'; 'n']을 사용하여이를 확인할 수 있습니다. ['t'; 'h'; 'e'; 'm'].

그러나 신중하게 조사한 결과 목록, 레코드 등의 구조화 된 값에 대한 OCaml 다형 비교 함수는 정의되어 있지 않습니다. 당신이 정말로 의지 할 수있는 유일한 것은 그것이 일관된다는 것입니다.

Pervasives module의 문서를 말한다에만이 :

이 함수는 정수, 문자, 문자열, 바이트 시퀀스 및 부동 소수점 숫자를 통해 일반적인 순서, 일치, 이상 모든 전체 순서로 확장 유형. 순서는 (=)와 호환됩니다. (=)의 경우와 같이 변경 가능한 구조가 내용별로 비교됩니다. 기능 값 간의 비교는 Invalid_argument을 발생시킵니다. 순환 구조 간의 비교가 종료되지 않을 수 있습니다.

특정 순서가 필요한 경우 자체 비교 기능을 작성해야합니다.