Prolog 상태

Prolog 상태

Prolog 플래그(flag)와 관련 상태를 조작하는 술어들을 설명해요.

출처: GNU Prolog Manual - Prolog state

본문

set_prolog_flag/2

Templates

set_prolog_flag(+flag, +term)

Description set_prolog_flag(Flag, Value)는 Prolog 플래그 Flag의 값을 Value로 설정해요.

Prolog 플래그: Prolog 플래그는 구현이 정의하거나 사용자가 정의한 값과 연관된 원자예요. 각 플래그에는 허용된 값의 범위가 있고, 그 외의 값은 domain_error예요. 다음 두 표는 사용 가능한 플래그, 가능한 값, 설명 및 ISO 여부를 제시해요. 첫 번째 표는 변경할 수 없는 플래그를, 두 번째 표는 변경 가능한 플래그를 제시해요. 기본값이 기계 독립적인 플래그의 경우 그 값은 밑줄로 표시돼요.

변경할 수 없는 플래그:

Flag 설명 ISO
prolog_name 원자 Prolog 시스템 이름 N
prolog_version 원자 Prolog 시스템 버전 번호 N
prolog_date 원자 Prolog 시스템 날짜 N
prolog_copyright 원자 Prolog 시스템 저작권 메시지 N
dialect 원자 gprolog로 고정 N
version 정수 Major * 10000 + Minor * 100 + Patch N
version_data 구조체 gprolog(Major,Minor,Patch,Extra) N
bounded true / false 정수가 유계인지 Y
max_integer 정수 가장 큰 정수 Y
min_integer 정수 가장 작은 정수 Y
integer_rounding_function toward_zero / down rnd(X) = X의 정수 부분 / rnd(X) = ⌊X⌋ (8.6.1절) Y
max_arity 정수 복합 항의 최대 항수 (255) Y
max_atom 정수 최대 원자 수 N
max_unget 정수 연속 unget의 최대 수 N
home 원자 GNU Prolog 홈 디렉토리 N
host_os 원자 운영체제 식별자 N
host_vendor 원자 운영체제 공급업체 N
host_cpu 원자 프로세서 식별자 N
host 원자 OS-공급업체-CPU의 조합 N
arch 원자 OS-CPU의 조합 N
address_bits 정수 기계의 주소 크기 (32 또는 64) N
unix on / off 아키텍처가 Unix 계열 OS인지 N
compiled_at 원자 __DATE____TIME__ C 컴파일러 매크로를 사용한 컴파일 날짜 N
c_cc 원자 GNU Prolog 컴파일에 사용된 C 컴파일러 (gcc, cc, clang, cl,…) N
c_cc_version_data 구조체 c_cc(Major,Minor,Patch,Extra) N
c_cflags 원자 GNU Prolog 컴파일에 사용된 CFLAGS N
c_ldflags 원자 GNU Prolog 컴파일에 사용된 LDFLAGS N
argv 원자 리스트 명령줄 인자 리스트 N

변경 가능한 플래그:

Flag 설명 ISO
char_conversion on / off 문자 변환이 활성화되었는지 Y
singleton_warning on / off 이름 붙은 singleton 변수에 대해 경고 N
suspicious_warning on / off 의심스러운 술어에 대해 경고 N
multifile_warning on / off 지원되지 않는 multifile 지시자에 대해 경고 N
strict_iso on / off 엄격한 ISO 동작 N
debug on / off 디버거가 활성화되었는지 Y
double_quotes atom / chars / codes / atom_no_escape / chars_no_escape / codes_no_escape 큰따옴표 상수를 다음으로 반환: 원자 / 문자 리스트 / 문자 코드 리스트 / atom이지만 이스케이프 시퀀스 무시 / chars이지만 이스케이프 시퀀스 무시 / codes이지만 이스케이프 시퀀스 무시 Y/N
back_quotes atom / chars / codes / atom_no_escape / chars_no_escape / codes_no_escape 백쿼트 상수를 다음으로 반환: 원자 / 문자 리스트 / 문자 코드 리스트 / atom이지만 이스케이프 무시 / chars이지만 이스케이프 무시 / codes이지만 이스케이프 무시 N
unknown error / warning / fail 술어가 알 수 없는 프로시저를 호출: existence_error 발생 / 메시지 표시 후 실패 / 조용히 실패 Y
syntax_error error / warning / fail 술어가 구문 오류를 일으킴: syntax_error 발생 / 메시지 표시 후 실패 / 조용히 실패 N
os_error error / warning / fail 술어가 O.S. 오류를 일으킴: system_error 발생 / 메시지 표시 후 실패 / 조용히 실패 N

strict_iso 플래그는 다른 Prolog 시스템과의 호환성을 허용하기 위해 도입됐어요. 꺼져 있으면 다음 완화가 적용돼요:

  • 내장 술어가 current_predicate/1(8.8.1절)로 발견됨.
  • 항 파서(read/1 등)가 더 관대해짐. 예: 0''이 허용되어 39를 반환하고, 이스케이프 시퀀스 \s(공백)와 \e(이스케이프)가 허용됨.
  • 다음 산술 반올림 함수인 ceiling, floor, round, truncate가 정수도 수용함(8.6.1절).

Errors

  • Flag가 변수 — instantiation_error
  • Value가 변수 — instantiation_error
  • Flag가 변수도 원자도 아님 — type_error(atom, Flag)
  • Flag가 원자이지만 유효한 플래그가 아님 — domain_error(prolog_flag, Flag)
  • Value가 Flag에 부적절 — domain_error(flag_value, Flag+Value)
  • Value가 Flag에 적절하지만 Flag가 수정 가능하지 않음 — permission_error(modify, flag, Flag)

Portability: ISO 술어. 모든 ISO 플래그가 구현되어 있어요.

current_prolog_flag/2

Templates

current_prolog_flag(?flag, ?term)

Description current_prolog_flag(Flag, Value)는 Flag와 통일하는 Prolog 플래그가 존재하고 그 값이 Value와 통일하면 성공해요. 이 술어는 백트래킹 시 재실행 가능해요.

Errors

  • Flag가 변수도 원자도 아님 — type_error(atom, Flag)
  • Flag가 원자이지만 유효한 플래그가 아님 — domain_error(prolog_flag, Flag)

Portability: ISO 술어.

set_bip_name/2

Templates

set_bip_name(+atom, +arity)

Description set_bip_name(Functor, Arity)는 Functor와 Arity로 오류의 컨텍스트(6.3.1절)를 초기화해요(Arity < 0이면 Functor만 의미).

Errors

  • Functor가 변수 — instantiation_error
  • Arity가 변수 — instantiation_error
  • Functor가 변수도 원자도 아님 — type_error(atom, Functor)
  • Arity가 변수도 정수도 아님 — type_error(integer, Arity)

Portability: GNU Prolog 술어.

current_bip_name/2

Templates

current_bip_name(?atom, ?arity)

Description current_bip_name(Functor, Arity)는 Functor와 Arity가 오류의 컨텍스트(6.3.1절)에 대응하면 성공해요(Arity < 0이면 Functor만 의미).

Errors

  • Functor가 변수도 원자도 아님 — type_error(atom, Functor)
  • Arity가 변수도 정수도 아님 — type_error(integer, Arity)

Portability: GNU Prolog 술어.

write_pl_state_file/1, read_pl_state_file/1

Templates

write_pl_state_file(+source_sink)
read_pl_state_file(+source_sink)

Description

  • write_pl_state_file(FileName) — 항의 파싱에 영향을 주는 모든 정보를 FileName에 기록(8.14절). 이는 Prolog로 작성된 하위 프로세스가 이 파일을 읽고 부모 프로세스가 한 것처럼 어떤 Prolog 항도 처리할 수 있게 해줘요. 이 파일은 gplc를 호출할 때 --pl-state 옵션의 인자로도 전달될 수 있어요(4.4.3절). 더 정확히 다음 요소가 저장돼요:
    • 모든 연산자 정의(8.14.10절).
    • 문자 변환 테이블(8.14.12절).
    • char_conversion, double_quotes, back_quotes, singleton_warning, suspicious_warning, multifile_warning Prolog 플래그의 값(8.22.1절).
  • read_pl_state_file(FileName)write_pl_state_file/1로 이전에 저장된 모든 정보를 FileName에서 읽음(복원).

Errors

  • FileName이 변수 — instantiation_error
  • FileName이 변수도 원자도 아님 — type_error(atom, FileName)
  • 운영체제 오류가 발생하고 os_error Prolog 플래그 값이 error(8.22.1절) — system_error(오류를 설명하는 원자)

Portability: GNU Prolog 술어.

더 알아보기