Prolog 상태
Prolog 상태
Prolog 플래그(flag)와 관련 상태를 조작하는 술어들을 설명해요.
본문
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_warningProlog 플래그의 값(8.22.1절).
read_pl_state_file(FileName)—write_pl_state_file/1로 이전에 저장된 모든 정보를 FileName에서 읽음(복원).
Errors
- FileName이 변수 —
instantiation_error - FileName이 변수도 원자도 아님 —
type_error(atom, FileName) - 운영체제 오류가 발생하고
os_errorProlog 플래그 값이 error(8.22.1절) —system_error(오류를 설명하는 원자)
Portability: GNU Prolog 술어.