변수 이름 부여/번호 부여

변수 이름 부여/번호 부여

변수에 이름이나 번호를 부여하는 내장 술어들을 설명해요.

출처: GNU Prolog Manual - Variable naming/numbering

본문

name_singleton_vars/1

Templates

name_singleton_vars(?term)

Description name_singleton_vars(Term)Term에 나타나는 각 싱글턴 변수를 '$VARNAME'('_') 형태의 항에 바인딩해요. 이런 항은 write_term/3에 의해 변수 이름으로 출력될 수 있어요(8.14.6절).

Errors: 없음.

Portability: GNU Prolog 술어.

name_query_vars/2

Templates

name_query_vars(+list, ?list)

Description name_query_vars(List, Rest)List의 각 요소에 대해, Name = Var 형태(여기서 Name은 원자, Var은 변수)라면 Var을 항 '$VARNAME'(Name)에 바인딩해요. 이런 항은 write_term/3에 의해 변수 이름으로 출력될 수 있어요(8.14.6절).

Rest는 바인딩을 만들지 않은 List의 요소들의 리스트와 통일돼요. 이 술어는 read_term/3variable_names(List) 또는 singletons(List) 옵션(8.14.1절)으로 반환한 변수 리스트에 이름을 붙이는 방법으로 제공돼요.

Errors

  • List가 부분 리스트 - instantiation_error
  • List가 부분 리스트도 리스트도 아님 - type_error(list, List)
  • Rest가 부분 리스트도 리스트도 아님 - type_error(list, Rest)

Portability: GNU Prolog 술어.

bind_variables/2, numbervars/3, numbervars/1

Templates

bind_variables(?term, +var_binding_option_list)
numbervars(?term, +integer, ?integer)
numbervars(?term)

Description bind_variables(Term, Options)Options가 주는 옵션에 따라 Term에 나타나는 각 변수를 바인딩해요.

변수 바인딩 옵션: Options는 변수 바인딩 옵션들의 리스트예요. 이 리스트에 모순된 옵션이 있으면 가장 오른쪽의 옵션이 적용돼요. 가능한 옵션은 다음과 같아요:

  • numbervars - Term에 나타나는 각 변수를 '$VAR'(N) 형태의 항에 바인딩하도록 지정(여기서 N은 정수). 이런 항은 write_term/3에 의해 변수 이름으로 출력될 수 있어요(8.14.6절). 이 값이 기본값이에요.
  • namevars - Term에 나타나는 각 변수를 '$VARNAME'(Name) 형태의 항에 바인딩하도록 지정(여기서 Namewrite_term/3'$VAR'(N) 형태의 항(여기서 N은 정수)을 보고 출력할 원자). 이런 항은 write_term/3에 의해 변수 이름으로 출력될 수 있어요(8.14.6절). numbervars의 대안이에요.
  • from(From) - Term의 변수에 번호/이름을 부여하는 데 사용할 첫 정수 N. 기본값은 0.
  • next(Next) - bind_variables/2가 성공하면 NextTerm의 변수를 바인딩하는 데 사용한 (마지막 정수 N)+1과 통일돼요.
  • exclude(List) - Term의 변수를 바인딩할 때 충돌을 피하기 위해 List에 나타나는 모든 변수 이름을 수집. 정확히는, From 이상의 수 N은 다음 경우에 Term의 변수를 바인딩하는 데 사용되지 않아요:
    • List'$VAR'(N) 형태 또는 '$VARNAME'(Name) 형태의 하위 항이 있을 때. 여기서 Namewrite_term/3'$VAR'(N) 형태의 항을 보고 출력할 상수.
    • List의 어떤 요소가 Name = Var 형태일 때. 여기서 Namewrite_term/3'$VAR'(N) 형태의 항을 보고 출력할 원자. 이 경우는 read_term/3(variable_names(List) 또는 singletons(List) 옵션 사용, 8.14.1절)과 name_query_vars/2(8.5.2절)가 반환한 리스트를 허용하기 위한 것이에요.

numbervars(Term, From, Next)bind_variables(Term, [from(From), next(Next)])와 동일하며, 즉 Term의 각 변수는 From ≤ N < Next'$VAR'(N)에 바인딩돼요. numbervars(Term)numbervars(Term, 0, _)와 동일해요.

항의 변수 집합을 반환하는 term_variables(8.4.5절)도 참고하세요.

Errors

  • Options가 부분 리스트이거나 변수인 요소 E를 가진 리스트 - instantiation_error
  • Options가 부분 리스트도 리스트도 아님 - type_error(list, Options)
  • Options 리스트의 어떤 요소 E가 변수도 변수 바인딩 옵션도 아님 - domain_error(var_binding_option, E)
  • From이 변수 - instantiation_error
  • From이 변수도 정수도 아님 - type_error(integer, From)
  • Next가 변수도 정수도 아님 - type_error(integer, Next)
  • List가 부분 리스트 - instantiation_error
  • List가 부분 리스트도 리스트도 아님 - type_error(list, List)

Portability: GNU Prolog 술어.

term_ref/2

Templates

term_ref(+term, ?integer)
term_ref(?term, +integer)

Description term_ref(Term, Ref)Term의 내부 참조가 Ref이면 성공해요. 이 술어는 항의 내부 참조를 얻거나 주어진 참조와 연관된 항을 얻는 데 쓸 수 있어요. 두 개의 동일한 항이 서로 다른 내부 참조를 가질 수 있다는 점을 주의하세요. 이 술어를 쓰는 좋은 방법은 먼저 주어진 항의 내부 참조를 기록하고 나중에 이 참조로 항을 다시 얻는 것이에요.

Errors

  • TermRef가 모두 변수 - instantiation_error
  • Ref가 변수도 정수도 아님 - type_error(integer, Ref)
  • Ref가 정수 < 0 - domain_error(not_less_than_zero, Ref)

Portability: GNU Prolog 술어.

더 알아보기