항 입출력
항 입출력
텍스트 스트림에서/으로 Prolog 항을 입출력하는 내장 술어들을 설명해요.
본문
이 내장 술어들은 텍스트 스트림에서/으로 Prolog 항을 입출력할 수 있게 해줘요. 원자 end_of_file이 파일 끝을 나타내는 항으로 반환돼요. 그런 항의 구문은 연산자를 변경해(8.14.10절), 그리고 char_conversion Prolog 플래그(8.22.1절)가 켜져 있으면 일부 문자를 다른 문자와 동등하게 만들어(8.14.12절) 변경할 수도 있어요.
큰따옴표로 묶인 토큰은 double_quotes Prolog 플래그(8.22.1절)의 값에 따라 원자, 문자 리스트 또는 문자 코드 리스트로 반환돼요. 마찬가지로 백쿼트로 묶인 토큰은 back_quotes Prolog 플래그의 값에 따라 반환돼요.
read_term/3, read_term/2, read/2, read/1
Templates
read_term(+stream_or_alias, ?term, +read_option_list)
read_term(?term, +read_option_list)
read(+stream_or_alias, ?term)
read(?term)
Description
read_term(SorA, Term, Options)는 Term이 스트림 항 또는 별칭 SorA와 연관된 스트림에서 Options가 주는 옵션에 따라 읽은 다음 항과 통일되면 참이에요.
읽기 옵션: Options는 읽기 옵션들의 리스트예요. 이 리스트에 모순된 옵션이 있으면 가장 오른쪽의 옵션이 적용돼요. 가능한 옵션은 다음과 같아요:
variables(VL)-VL은 입력 항의 모든 변수의 리스트와 통일(왼쪽에서 오른쪽 탐색 순서). 익명 변수도VL리스트에 포함돼요.variable_names(VNL)-VNL은Name = Var쌍들의 리스트와 통일. 여기서Var는 항의 이름 있는 변수,Name은Var의 이름과 연관된 원자. 익명 변수는VNL리스트에 포함되지 않아요. 쌍들은 항에서의Var의 왼쪽에서 오른쪽 탐색 순서로 나타나요.singletons(SL)-SL은Name = Var쌍들의 리스트와 통일. 여기서Var는 항에 한 번만 나타나는 이름 있는 변수,Name은Var의 이름과 연관된 원자. 익명 변수는SL리스트에 포함되지 않아요.syntax_error(error / warning / fail)- 구문 오류의 효과 지정:error- syntax_error가 제기.warning- 경고 메시지가 표시되고 술어 실패.fail- 술어가 조용히 실패.- 기본값은
syntax_errorProlog 플래그의 값(8.22.1절).
end_of_term(dot / eof)- 항 끝 구분자 지정:dot- 고전적 마침표(full-stop) 구분자(마침표 뒤 레이아웃 문자).eof- 파일 끝 구분자.- 이 옵션은
read_term_from_atom/3(8.15.1절) 같은 술어에서 원자 끝에 마침표를 붙이지 않게 하는 데 유용. 기본값은dot.
read(SorA, Term)은 read_term(SorA, Term, [])와 동일해요. read_term/2와 read/1은 현재 입력 스트림에 적용돼요.
Errors
SorA가 변수 -instantiation_errorOptions가 부분 리스트이거나 변수인 요소 E를 가진 리스트 -instantiation_errorSorA가 변수도 스트림 항 또는 별칭도 아님 -domain_error(stream_or_alias, SorA)Options가 부분 리스트도 리스트도 아님 -type_error(list, Options)Options리스트의 어떤 요소 E가 변수도 유효한 읽기 옵션도 아님 -domain_error(read_option, E)SorA가 열린 스트림과 연관되지 않음 -existence_error(stream, SorA)SorA가 출력 스트림 -permission_error(input, stream, SorA)SorA가 이진 스트림과 연관됨 -permission_error(input, binary_stream, SorA)SorA가end_of_stream(past)와eof_action(error)스트림 속성 가짐 -permission_error(input, past_end_of_stream, SorA)- 구문 오류가 발생하고
syntax_errorProlog 플래그의 값이error임(8.22.1절) -syntax_error(오류를 설명하는 원자)
Portability: ISO 술어. ISO 참조는 읽은 항이 Flag로 지정된 구현 정의 한계를 넘으면 representation_error(Flag)를 제기하는데, 여기서 Flag는 max_arity, max_integer, min_integer 중 하나예요. GNU Prolog는 min_integer도 max_integer 위반도 감지하지 않고 max_arity 위반은 구문 오류로 처리해요. 읽기 옵션 syntax_error와 end_of_term은 GNU Prolog 확장이에요.
read_atom/2, read_atom/1, read_integer/2, read_integer/1, read_number/2, read_number/1
Templates
read_atom(+stream_or_alias, ?atom)
read_atom(?atom)
read_integer(+stream_or_alias, ?integer)
read_integer(?integer)
read_number(+stream_or_alias, ?number)
read_number(?number)
Description
read_atom(SorA, Atom)-Atom이 스트림 항 또는 별칭SorA와 연관된 스트림에서 읽은 다음 원자와 통일되면 성공.read_integer(SorA, Integer)-Integer가 스트림 항 또는 별칭SorA와 연관된 스트림에서 읽은 다음 정수와 통일되면 성공.read_number(SorA, Number)-Number가 스트림 항 또는 별칭SorA와 연관된 스트림에서 읽은 다음 숫자(정수 또는 부동소수점 수)와 통일되면 성공.
read_atom/1, read_integer/1, read_number/1은 현재 입력 스트림에 적용돼요.
Errors
SorA가 변수 -instantiation_errorAtom이 변수도 원자도 아님 -type_error(atom, Atom)Integer가 변수도 정수도 아님 -type_error(integer, Integer)Number가 변수도 숫자도 아님 -type_error(number, Number)SorA가 변수도 스트림 항 또는 별칭도 아님 -domain_error(stream_or_alias, SorA)SorA가 열린 스트림과 연관되지 않음 -existence_error(stream, SorA)SorA가 출력 스트림 -permission_error(input, stream, SorA)SorA가 이진 스트림과 연관됨 -permission_error(input, binary_stream, SorA)SorA가end_of_stream(past)와eof_action(error)스트림 속성 가짐 -permission_error(input, past_end_of_stream, SorA)- 구문 오류가 발생하고
syntax_errorProlog 플래그의 값이error임(8.22.1절) -syntax_error(오류를 설명하는 원자)
Portability: GNU Prolog 술어.
read_token/2, read_token/1
Templates
read_token(+stream_or_alias, ?nonvar)
read_token(?nonvar)
Description
read_token(SorA, Token)은 Token이 스트림 항 또는 별칭 SorA와 연관된 스트림에서 읽은 다음 Prolog 토큰의 인코딩과 통일되면 성공해요.
토큰 인코딩:
var(A)- 이름이 원자 A인 변수가 읽힘.- 원자 A - 원자 A가 읽힘.
- 정수 N - 정수 N이 읽힘.
- 부동소수점 수 N - 부동소수점 수 N이 읽힘.
string(A)- 문자들이 원자 A를 형성하는 문자열(큰따옴표로 묶인 항목)이 읽힘.punct(P)- 구두점 문자 P가 읽힘(P는()[]{|}중 하나인 한 문자 원자, 원자full_stop또는 원자end_of_file).back_quotes(A)- 문자들이 원자 A를 형성하는 백쿼트 항목이 읽힘.extended(A)- 확장 문자 A(원자)가 읽힘.
read_term/3에서와 같이 read_token/2의 동작은 일부 Prolog 플래그에 의해 영향을 받을 수 있어요(8.14절). read_token/1은 현재 입력 스트림에 적용돼요.
Errors
SorA가 변수 -instantiation_errorSorA가 변수도 스트림 항 또는 별칭도 아님 -domain_error(stream_or_alias, SorA)SorA가 열린 스트림과 연관되지 않음 -existence_error(stream, SorA)SorA가 출력 스트림 -permission_error(input, stream, SorA)SorA가 이진 스트림과 연관됨 -permission_error(input, binary_stream, SorA)SorA가end_of_stream(past)와eof_action(error)스트림 속성 가짐 -permission_error(input, past_end_of_stream, SorA)- 구문 오류가 발생하고
syntax_errorProlog 플래그의 값이error임(8.22.1절) -syntax_error(오류를 설명하는 원자)
Portability: GNU Prolog 술어.
syntax_error_info/4
Templates
syntax_error_info(?atom, ?integer, ?integer, ?atom)
Description
syntax_error_info(FileName, Line, Column, Error)는 마지막 구문 오류와 연관된 정보를 반환해요. Line은 오류의 줄 번호, Column은 오류의 열 번호, Error는 오류를 설명하는 원자예요.
Errors
FileName이 변수도 원자도 아님 -type_error(atom, FileName)Line이 변수도 정수도 아님 -type_error(integer, Line)Column이 변수도 정수도 아님 -type_error(integer, Column)Error가 변수도 원자도 아님 -type_error(atom, Error)
Portability: GNU Prolog 술어.
last_read_start_line_column/2
Templates
last_read_start_line_column(?integer, ?integer)
Description
last_read_start_line_column(Line, Column)은 마지막으로 읽은 술어의 시작과 연관된 줄 번호와 열 번호로 Line과 Column을 통일해요. 이 술어는 다음 술어 중 하나를 호출한 후에 쓸 수 있어요: read_term/3, read_term/2, read/2, read/1(8.14.1절), read_atom/2, read_atom/1, read_integer/2, read_integer/1, read_number/2, read_number/1(8.14.2절), read_token/2, read_token/1(8.14.3절).
Errors
Line이 변수도 정수도 아님 -type_error(integer, Line)Column이 변수도 정수도 아님 -type_error(integer, Column)
Portability: GNU Prolog 술어.
write_term/3, write_term/2, write/2, write/1, writeq/2, writeq/1, write_canonical/2, write_canonical/1, display/2, display/1, print/2, print/1
Templates
write_term(+stream_or_alias, ?term, +write_option_list)
write_term(?term, +write_option_list)
write(+stream_or_alias, ?term)
write(?term)
writeq(+stream_or_alias, ?term)
writeq(?term)
write_canonical(+stream_or_alias, ?term)
write_canonical(?term)
display(+stream_or_alias, ?term)
display(?term)
print(+stream_or_alias, ?term)
print(?term)
Description
write_term(SorA, Term, Options)는 Options가 주는 옵션에 따라 스트림 항 또는 별칭 SorA와 연관된 스트림에 Term을 써요.
쓰기 옵션: Options는 쓰기 옵션들의 리스트예요. 이 리스트에 모순된 옵션이 있으면 가장 오른쪽의 옵션이 적용돼요. 가능한 옵션은 다음과 같아요:
quoted(true / false)- true이면 각 원자와 functor가read_term/3으로 항을 입력하는 데 필요하다면 인용돼요. false이면 추가 인용이 없어요. 기본값은 false.ignore_ops(true / false)- true이면 각 복합 항이 함수 표기로 출력(연산자 표기나 리스트 표기 사용 안 함). false이면 연산자와 리스트 표기를 사용. 기본값은 false.numbervars(true / false)- true이면'$VAR'(N)형태의 항(N은 정수)이 변수 이름으로 출력(아래 참조). false이면 그런 항은 (다른 옵션에 따라) 정상적으로 출력. 기본값은 false.namevars(true / false)- true이면'$VARNAME'(Name)형태의 항(Name은 변수 이름 구문을 따르는 원자)이 변수 이름으로 출력(아래 참조). false이면 그런 항은 (다른 옵션에 따라) 정상적으로 출력. 기본값은 false.variable_names(VNL)- VNL은Name = Var쌍들의 리스트. 여기서Var는 변수,Name은Var의 이름과 연관된 원자.quoted(false)로 각 변수Var는Name = Var항이 리스트 VNL의 요소일 때 원자Name으로 쓰여짐. 같은 변수 이름에 여러 쌍이 있으면 첫 번째가 적용.space_args(true / false)- true이면 함수 표기 또는 리스트의 복합 항 인자를 구분하는 각 쉼표 뒤에 여분의 공백 문자가 방출. false이면 추가 공백 없음. 기본값은 false.portrayed(true / false)- true이고 술어portray/1이 존재하면write_term/3은 다음과 같이 동작:Term이 변수이면 그냥 씀.Term이 비변수이면portray/1로 전달. 성공하면Term이 출력된 것으로 간주. 그렇지 않으면write_term/3은 (다른 옵션에 따라)Term의 주 functor(Term이 원자이면Term자신)를 출력하고Term이 복합 항이면Term의 구성 요소에 대해portray/1을 재귀적으로 호출.ignore_ops(false)에서 리스트는 먼저portray/1에 전달되고 그 호출이 실패할 때만 리스트의 각 요소가portray/1에 전달됨(그래서 각 하위 리스트는 전달되지 않음). 기본값은 false.max_depth(N)- 복합 항의 출력 깊이 제어. N은 깊이를 지정하는 정수. 깊이가 N보다 큰 항의 출력은...(점 3개)를 출력함. 기본적으로 깊이 제한 없음.priority(N)- 항을 출력할 시작 우선순위 지정. 이 옵션은Term을 대괄호로 둘러싸야 할지 제어. N은 1200 이하의 양의 정수. 기본값 N = 1200.
변수 번호 부여: numbervars(true) 옵션이 write_term/3에 전달되면 '$VAR'(N) 형태의 항(N은 정수)이 대문자로 구성된 변수 이름으로 출력되고 가능하면 정수가 뒤따라요. 대문자는 알파벳의 (I+1) 번째 문자이고 정수는 J이며, 여기서 I = N mod 26이고 J = N // 26이에요. 정수 J는 0이면 생략돼요. 예를 들어:
'$VAR'(0)은 A로 쓰여짐'$VAR'(1)은 B로 쓰여짐- ...
'$VAR'(25)는 Z로 쓰여짐'$VAR'(26)은 A1로 쓰여짐'$VAR'(27)은 B1로 쓰여짐
변수 이름 부여: namevars(true) 옵션이 write_term/3에 전달되면 '$VARNAME'(Name) 형태의 항(Name은 원자)이 문자 Name으로 구성된 변수 이름으로 출력돼요. 예: '$VARNAME'('A')는 A로 쓰여짐(quoted(true) 옵션이 있어도).
write(SorA, Term)은write_term(SorA, Term, [numbervars(true), namevars(true)])와 동일.writeq(SorA, Term)은write_term(SorA, Term, [quoted(true), numbervars(true), namevars(true)])와 동일.write_canonical(SorA, Term)은write_term(SorA, Term, [quoted(true), ignore_ops(true), numbervars(false), namevars(false)])와 동일.display(SorA, Term)은write_term(SorA, Term, [ignore_ops(true), numbervars(false), namevars(false)])와 동일.print(SorA, Term)은write_term(SorA, Term, [numbervars(false), portrayed(true)])와 동일.
write_term/2, write/1, writeq/1, write_canonical/1, display/1, print/1은 현재 출력 스트림에 적용돼요.
Errors
SorA가 변수 -instantiation_errorOptions가 부분 리스트이거나 변수인 요소 E를 가진 리스트 -instantiation_errorOptions가 부분 리스트도 리스트도 아님 -type_error(list, Options)SorA가 변수도 스트림 항 또는 별칭도 아님 -domain_error(stream_or_alias, SorA)Options리스트의 어떤 요소 E가 변수도 유효한 쓰기 옵션도 아님 -domain_error(write_option, E)SorA가 열린 스트림과 연관되지 않음 -existence_error(stream, SorA)SorA가 입력 스트림 -permission_error(output, stream, SorA)SorA가 이진 스트림과 연관됨 -permission_error(output, binary_stream, SorA)
Portability: display/1-2와 print/1-2가 GNU Prolog 술어인 것 외에는 ISO 술어. 옵션 namevars, variable_names, space_args, portrayed, max_depth, priority는 GNU Prolog 확장.
format/3, format/2
Templates
format(+stream_or_alias, +character_code_list_or_atom, +list)
format(+character_code_list_or_atom, +list)
Description
format(SorA, Format, Arguments)는 각 형식 제어 시퀀스 F를 Arguments의 해당 요소(F에 따라 형식화된)로 대체하며 Format 문자열을 스트림 항 또는 별칭 SorA와 연관된 스트림에 써요.
형식 제어 시퀀스: 제어 시퀀스의 일반 형식은 ~NC예요. 문자 C가 제어 시퀀스의 유형을 결정해요. N은 선택적 숫자 인자예요. N의 대체 형식은 *예요. *는 Arguments의 다음 인자 Arg가 제어 시퀀스의 숫자 인자로 사용되어야 함을 의미해요. C의 printf() 형식 시퀀스(% 문자로 시작하는) 사용도 허용돼요. 다음 제어 시퀀스가 사용 가능해요:
| 형식 시퀀스 | 인자 유형 | 설명 |
|---|---|---|
| ~Na | atom | 인용 없이 원자 출력. N은 필요한 경우 오른쪽에 공백을 사용해 출력할 최소 문자 수(기본값: 원자의 길이) |
| ~Nc | character code | 코드와 연관된 문자 출력. N은 문자를 출력할 횟수(기본값: 1) |
| ~Nf, ~Ne, ~NE, ~Ng, ~NG | float expression | 인자 Arg와 N을 C printf() 함수에 전달: N이 지정되지 않으면 printf("%f",Arg), 그렇지 않으면 printf("%.Nf",Arg). ~Ne, ~NE, ~Ng, ~NG도 마찬가지 |
| ~Nd | integer expression | 인자 출력. N은 소수점 뒤 자릿수. N이 0이면 소수점이 출력되지 않음(기본값: 0) |
| ~ND | integer expression | 소수점 왼쪽의 세 자리 그룹을 ,로 구분한다는 점만 제외하면 ~Nd와 동일 |
| ~Nr | integer expression | 진법 N으로 인자 출력. 2 ≤ N ≤ 36(기본값: 8). 문자 a-z가 9보다 큰 자릿수 표현 |
| ~NR | integer expression | 문자 A-Z가 9보다 큰 자릿수를 나타낸다는 점만 제외하면 ~Nr과 동일 |
| ~Ns | character code list | 정확히 N개의 문자 출력(기본값: 리스트의 길이) |
| ~NS | character list | 정확히 N개의 문자 출력(기본값: 리스트의 길이) |
| ~i | term | 현재 인자 무시 |
| ~k | term | 인자를 write_canonical/1(8.14.6절)로 전달 |
| ~p | term | 인자를 print/1(8.14.6절)로 전달 |
| ~q | term | 인자를 writeq/1(8.14.6절)로 전달 |
| ~w | term | 인자를 write/1(8.14.6절)로 전달 |
| ~~ | none | 문자 ~ 출력 |
| ~Nn | none | N개의 개행 문자 출력(기본값: 1) |
| ~N | none | 줄의 시작이 아니면 개행 문자 출력 |
| ~? | atom | 인자를 중첩 형식 문자열로 사용 |
| %F | atom, integer 또는 float expression | 원자(C 문자열), 정수, 부동소수점 수 출력을 위한 C 함수 printf(3) 인터페이스. *도 허용됨 |
format/2는 현재 출력 스트림에 적용돼요.
Errors
SorA가 변수 -instantiation_errorFormat이 부분 리스트이거나 변수인 요소 E를 가진 리스트 -instantiation_errorArguments가 부분 리스트 -instantiation_errorFormat이 부분 리스트도 리스트도 아닌 원자도 아님 -type_error(list, Format)Arguments가 부분 리스트도 리스트도 아님 -type_error(list, Arguments)Format리스트의 어떤 요소 E가 변수도 문자 코드도 아님 -representation_error(character_code, E)SorA가 변수도 스트림 항 또는 별칭도 아님 -domain_error(stream_or_alias, SorA)Format의 어떤 요소 E가 유효한 형식 제어 시퀀스가 아님 -domain_error(format_control_sequence, E)Arguments리스트에 충분한 요소가 없음 -domain_error(non_empty_list, [])Arguments리스트의 어떤 요소 E가 변수인데 비변수 항이 기대됨 -instantiation_errorArguments리스트의 어떤 요소 E가 변수도 원자도 아닌데 원자가 기대됨 -type_error(atom, E)Arguments리스트의 어떤 요소 E가 정수 또는 부동소수점 수가 기대되는데 산술 표현식으로 평가될 수 없음 - 산술 오류(8.6.1절)Arguments리스트의 어떤 요소 E가 변수도 문자 코드도 아닌데 문자 코드가 기대됨 -representation_error(character_code, E)SorA가 열린 스트림과 연관되지 않음 -existence_error(stream, SorA)SorA가 입력 스트림 -permission_error(output, stream, SorA)SorA가 이진 스트림과 연관됨 -permission_error(output, binary_stream, SorA)
Portability: GNU Prolog 술어.
portray_clause/2, portray_clause/1
Templates
portray_clause(+stream_or_alias, +clause)
portray_clause(+clause)
Description
portray_clause(SorA, Clause)는 Clause를 스트림 항 또는 별칭 SorA와 연관된 스트림에 보기 좋게(pretty print) 써요. portray_clause/2는 변수 바인딩 술어 name_singleton_vars/1(8.5.1절)과 numbervars/1(8.5.3절)을 사용해요. 이 술어는 listing/1(8.23.3절)이 사용해요. portray_clause/1은 현재 출력 스트림에 적용돼요.
Errors
Clause가 변수 -instantiation_errorClause가 변수도 callable 항도 아님 -type_error(callable, Clause)SorA가 변수 -instantiation_errorSorA가 변수도 스트림 항 또는 별칭도 아님 -domain_error(stream_or_alias, SorA)SorA가 열린 스트림과 연관되지 않음 -existence_error(stream, SorA)SorA가 입력 스트림 -permission_error(output, stream, SorA)SorA가 이진 스트림과 연관됨 -permission_error(output, binary_stream, SorA)
Portability: GNU Prolog 술어.
get_print_stream/1
Templates
get_print_stream(?stream)
Description
get_print_stream(Stream)은 Stream을 print/2(8.14.6절)가 사용하는 출력 스트림과 연관된 스트림 항과 통일해요. 이 술어의 목적은 사용자 정의 portray/1 술어가 사용 중인 출력 스트림을 식별하게 하는 거예요.
Errors
Stream이 변수도 스트림 항도 아님 -domain_error(stream, Stream)
Portability: GNU Prolog 술어.
op/3
Templates
op(+integer, +operator_specifier, +atom_or_atom_list)
Description
op(Priority, OpSpecifier, Operator)는 연산자 테이블을 변경해요. Operator는 지정자 OpSpecifier와 Priority로 정의된 속성을 가진 연산자로 선언돼요. Priority는 0 이상 1200 이하의 정수여야 해요. Priority가 0이면 Operator의 연산자 속성(있으면)이 취소돼요. Operator는 원자들의 리스트일 수도 있는데, 그 경우 그것들 모두가 연산자로 선언돼요.
일반적으로 연산자는 연산자 테이블에서 제거하고 그 우선순위나 지정자를 변경할 수 있어요. 그러나 ',' 연산자를 초기 상태에서 변경하려고 시도하는 것은 오류예요. 원자는 여러 연산자 정의를 가질 수 있지만(예: 접두 및 중위 +), 원자는 중위와 후위 연산자 정의를 동시에 가질 수 없어요.
연산자 지정자: 다음 지정자가 사용 가능해요:
| 지정자 | 유형 | 결합성(Associativity) |
|---|---|---|
| fx | 접두 | no |
| fy | 접두 | yes |
| xf | 후위 | no |
| yf | 후위 | yes |
| xfx | 중위 | no |
| yfx | 중위 | left |
| xfy | 중위 | right |
Prolog 미리 정의된 연산자:
| 우선순위 | 지정자 | 연산자 |
|---|---|---|
| 1200 | xfx | :- --> |
| 1200 | fx | :- |
| 1105 | xfy | | |
| 1100 | xfy | ; |
| 1050 | xfy | -> *-> |
| 1000 | xfy | , |
| 900 | fy | \+ |
| 700 | xfx | = \= =.. == \== @< @=< @> @>= is =:= =\= < =< > >= |
| 600 | xfy | : |
| 500 | yfx | + - /\ / |
| 400 | yfx | * / // rem mod div << >> |
| 200 | xfx | ** ^ |
| 200 | fy | + - \ |
FD 미리 정의된 연산자:
| 우선순위 | 지정자 | 연산자 |
|---|---|---|
| 750 | xfy | #<=> #\<=> |
| 740 | xfy | #==> #\==> |
| 730 | xfy | ## #\/ #\\/ |
| 720 | yfx | #/\ #/\ |
| 710 | fy | #\ |
| 700 | xfx | #= #\= #< #=< #> #>= #=# #\=# #<# #=<# #># #>=# |
| 500 | yfx | + - |
| 400 | yfx | * / // rem |
| 200 | xfy | ** |
| 200 | fy | + - |
Errors
Priority가 변수 -instantiation_errorOpSpecifier가 변수 -instantiation_errorOperator가 부분 리스트이거나 변수인 요소 E를 가진 리스트 -instantiation_errorPriority가 변수도 정수도 아님 -type_error(integer, Priority)OpSpecifier가 변수도 원자도 아님 -type_error(atom, OpSpecifier)Operator가 부분 리스트도 리스트도 원자도 아님 -type_error(list, Operator)Operator리스트의 어떤 요소 E가 변수도 원자도 아님 -type_error(atom, E)Priority가 0 이상 1200 이하가 아닌 정수 -domain_error(operator_priority, Priority)OpSpecifier가 유효한 연산자 지정자가 아님 -domain_error(operator_specifier, OpSpecifier)Operator(또는Operator리스트의 요소)가','-permission_error(modify, operator, ',')OpSpecifier가Operator가 후위와 중위 정의를 갖게 하는 지정자 -permission_error(create, operator, Operator)Operator(또는 리스트의 요소)가|이고 그것이 접두 또는 후위 정의를 갖거나 우선순위가 1100 이하일 것 -permission_error(create, operator, '|')Operator(또는 리스트의 요소)가[]또는{}-permission_error(create, operator, Operator)
Portability: ISO 술어. ISO 참조는 프로그램이 current_op/3을 호출한 다음 op/3으로 연산자 정의를 수정하고 current_op/3 호출로 백트래킹하면, 그 변경이 그 current_op/3 목표에 영향을 주지 않음이 보장됨을 암시해요. 이것은 GNU Prolog에서 보장되지 않아요.
current_op/3
Templates
current_op(?integer, ?operator_specifier, ?atom)
Description
current_op(Priority, OpSpecifier, Operator)는 Operator가 지정자 OpSpecifier와 Priority로 정의된 속성을 가진 연산자이면 성공해요. 이 술어는 백트래킹 시 재실행 가능해요.
Errors
Priority가 변수도 연산자 우선순위도 아님 -domain_error(operator_priority, Priority)OpSpecifier가 변수도 연산자 지정자도 아님 -domain_error(operator_specifier, OpSpecifier)Operator가 변수도 원자도 아님 -type_error(atom, Operator)
Portability: ISO 술어.
char_conversion/2
Templates
char_conversion(+character, +character)
Description
char_conversion(InChar, OutChar)는 문자 변환 매핑을 변경해요. 이 매핑은 다음 읽기 술어가 문자 InChar의 모든 발생을 OutChar로 대체하는 데 사용해요: read_term/3(8.14.1절), read_atom/2, read_integer/2, read_number/2(8.14.2절), read_token/2(8.14.3절). 그러나 변환 메커니즘은 char_conversion Prolog 플래그(8.22.1절)를 켜서 이전에 활성화되어 있어야 해요. InChar와 OutChar가 같으면 문자 InChar의 어떤 변환을 제거하는 효과가 있어요.
단일 문자 읽기 술어(예: get_char/2)는 문자 변환을 절대 하지 않는다는 점을 주의하세요. 그런 동작이 필요하다면 current_char_conversion/2(8.14.13절)를 사용해 명시적으로 해야 해요.
Errors
InChar가 변수 -instantiation_errorOutChar가 변수 -instantiation_errorInChar가 변수도 문자도 아님 -type_error(character, InChar)OutChar가 변수도 문자도 아님 -type_error(character, OutChar)
Portability: ISO 술어. type_error(character,...)는 GNU Prolog 동작이고, ISO 참조는 이 경우 representation_error(character)를 정의해요. 이는 ISO 참조의 오류로 보여요. 많은 다른 문자를 받는 내장 술어(예: char_code/2, put_char/2)에서 type_error가 제기되기 때문이에요. ISO 참조는 프로그램이 current_char_conversion/2를 호출하고 char_conversion/2로 문자 매핑을 수정한 다음 current_char_conversion/2 호출로 백트래킹하면, 그 변경이 그 목표에 영향을 주지 않음이 보장됨을 암시해요. 이것은 GNU Prolog에서 보장되지 않아요.
current_char_conversion/2
Templates
current_char_conversion(?character, ?character)
Description
current_char_conversion(InChar, OutChar)는 문자 변환 매핑에 따라 InChar의 변환이 OutChar이면 성공해요. 이 경우 InChar와 OutChar는 다르고, 이 술어는 백트래킹 시 재실행 가능해요.
Errors
InChar가 변수도 문자도 아님 -type_error(character, InChar)OutChar가 변수도 문자도 아님 -type_error(character, OutChar)
Portability: ISO 술어. char_conversion/2(8.14.12절)와 같은 주의 사항.