항 비교

항 비교

Prolog 항들을 비교하는 내장 술어들을 설명해요.

출처: GNU Prolog Manual - Term comparison

본문

표준 항 전체순서(Standard total ordering of terms)

이 절에서 설명하는 내장 술어들은 사용자가 Prolog 항을 비교할 수 있게 해줘요. Prolog 항들은 표준 항 전체순서에 따라 완전히 순서가 매겨지며, 그 순서는 다음과 같아요(가장 작은 항부터 가장 큰 항까지):

  1. 변수 - 가장 오래된 것 먼저.
  2. 유한 도메인 변수(9.1.1절) - 가장 오래된 것 먼저.
  3. 부동소수점 수 - 숫자 순서로.
  4. 정수 - 숫자 순서로.
  5. 원자 - 알파벳(즉 문자 코드) 순서로.
  6. 복합 항 - 먼저 아리티로, 그다음 주 functor의 이름으로, 그리고 인자들을 왼쪽에서 오른쪽 순서로.

리스트는 복합 항(주 functor가 '.'/2)으로 취급돼요.

변수의 순서의 이식성은 보장되지 않아요(ISO 참조에서 변수의 순서는 시스템 의존적).

(==)/2 - 항 동일, (==)/2 - 항 비동일, (@<)/2 - 항 미만, (@=<)/2 - 항 이하, (@>)/2 - 항 초과, (@>=)/2 - 항 이상

Templates

==(?term, ?term)
\==(?term, ?term)
@<(?term, ?term)
@=<(?term, ?term)
@>(?term, ?term)
@>=(?term, ?term)

Description 이 술어들은 표준 항 전체순서(8.3.1절)에 따라 두 항을 비교해요.

  • Term1 == Term2 - Term1Term2가 같으면 성공.
  • Term1 \== Term2 - Term1Term2가 다르면 성공.
  • Term1 @< Term2 - Term1Term2보다 작으면 성공.
  • Term1 @=< Term2 - Term1Term2보다 작거나 같으면 성공.
  • Term1 @> Term2 - Term1Term2보다 크면 성공.
  • Term1 @>= Term2 - Term1Term2보다 크거나 같으면 성공.

==, \==, @<, @=<, @>, @>=는 미리 정의된 중위 연산자예요(8.14.10절).

Errors: 없음.

Portability: ISO 술어.

compare/3

Templates

compare(?atom, +term, +term)

Description compare(Order, Term1, Term2)는 표준 순서(8.3.1절)에 따라 Term1Term2를 비교하고 Order를 다음으로 통일해요:

  • Term1Term2보다 작으면 원자 <.
  • Term1Term2가 같으면 원자 =.
  • Term1Term2보다 크면 원자 >.

Errors

  • Order가 변수도 원자도 아님 - type_error(atom, Order)
  • Order가 원자이지만 <, =, >가 아님 - domain_error(order, Order)

Portability: ISO 술어.

더 알아보기