항 입출력

항 입출력

텍스트 스트림에서/으로 Prolog 항을 입출력하는 내장 술어들을 설명해요.

출처: GNU Prolog Manual - Term input/output

본문

이 내장 술어들은 텍스트 스트림에서/으로 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) - VNLName = Var 쌍들의 리스트와 통일. 여기서 Var는 항의 이름 있는 변수, NameVar의 이름과 연관된 원자. 익명 변수는 VNL 리스트에 포함되지 않아요. 쌍들은 항에서의 Var의 왼쪽에서 오른쪽 탐색 순서로 나타나요.
  • singletons(SL) - SLName = Var 쌍들의 리스트와 통일. 여기서 Var는 항에 한 번만 나타나는 이름 있는 변수, NameVar의 이름과 연관된 원자. 익명 변수는 SL 리스트에 포함되지 않아요.
  • syntax_error(error / warning / fail) - 구문 오류의 효과 지정:
    • error - syntax_error가 제기.
    • warning - 경고 메시지가 표시되고 술어 실패.
    • fail - 술어가 조용히 실패.
    • 기본값은 syntax_error Prolog 플래그의 값(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/2read/1은 현재 입력 스트림에 적용돼요.

Errors

  • SorA가 변수 - instantiation_error
  • Options가 부분 리스트이거나 변수인 요소 E를 가진 리스트 - instantiation_error
  • SorA가 변수도 스트림 항 또는 별칭도 아님 - 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)
  • SorAend_of_stream(past)eof_action(error) 스트림 속성 가짐 - permission_error(input, past_end_of_stream, SorA)
  • 구문 오류가 발생하고 syntax_error Prolog 플래그의 값이 error임(8.22.1절) - syntax_error(오류를 설명하는 원자)

Portability: ISO 술어. ISO 참조는 읽은 항이 Flag로 지정된 구현 정의 한계를 넘으면 representation_error(Flag)를 제기하는데, 여기서 Flagmax_arity, max_integer, min_integer 중 하나예요. GNU Prolog는 min_integermax_integer 위반도 감지하지 않고 max_arity 위반은 구문 오류로 처리해요. 읽기 옵션 syntax_errorend_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_error
  • Atom이 변수도 원자도 아님 - 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)
  • SorAend_of_stream(past)eof_action(error) 스트림 속성 가짐 - permission_error(input, past_end_of_stream, SorA)
  • 구문 오류가 발생하고 syntax_error Prolog 플래그의 값이 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_error
  • 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)
  • SorAend_of_stream(past)eof_action(error) 스트림 속성 가짐 - permission_error(input, past_end_of_stream, SorA)
  • 구문 오류가 발생하고 syntax_error Prolog 플래그의 값이 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)은 마지막으로 읽은 술어의 시작과 연관된 줄 번호와 열 번호로 LineColumn을 통일해요. 이 술어는 다음 술어 중 하나를 호출한 후에 쓸 수 있어요: 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는 변수, NameVar의 이름과 연관된 원자. quoted(false)로 각 변수 VarName = 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_error
  • Options가 부분 리스트이거나 변수인 요소 E를 가진 리스트 - instantiation_error
  • Options가 부분 리스트도 리스트도 아님 - 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-2print/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_error
  • Format이 부분 리스트이거나 변수인 요소 E를 가진 리스트 - instantiation_error
  • Arguments가 부분 리스트 - instantiation_error
  • Format이 부분 리스트도 리스트도 아닌 원자도 아님 - 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_error
  • Arguments 리스트의 어떤 요소 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_error
  • Clause가 변수도 callable 항도 아님 - type_error(callable, Clause)
  • SorA가 변수 - instantiation_error
  • SorA가 변수도 스트림 항 또는 별칭도 아님 - 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)Streamprint/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는 지정자 OpSpecifierPriority로 정의된 속성을 가진 연산자로 선언돼요. 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_error
  • OpSpecifier가 변수 - instantiation_error
  • Operator가 부분 리스트이거나 변수인 요소 E를 가진 리스트 - instantiation_error
  • Priority가 변수도 정수도 아님 - 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, ',')
  • OpSpecifierOperator가 후위와 중위 정의를 갖게 하는 지정자 - 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가 지정자 OpSpecifierPriority로 정의된 속성을 가진 연산자이면 성공해요. 이 술어는 백트래킹 시 재실행 가능해요.

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절)를 켜서 이전에 활성화되어 있어야 해요. InCharOutChar가 같으면 문자 InChar의 어떤 변환을 제거하는 효과가 있어요.

단일 문자 읽기 술어(예: get_char/2)는 문자 변환을 절대 하지 않는다는 점을 주의하세요. 그런 동작이 필요하다면 current_char_conversion/2(8.14.13절)를 사용해 명시적으로 해야 해요.

Errors

  • InChar가 변수 - instantiation_error
  • OutChar가 변수 - instantiation_error
  • InChar가 변수도 문자도 아님 - 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이면 성공해요. 이 경우 InCharOutChar는 다르고, 이 술어는 백트래킹 시 재실행 가능해요.

Errors

  • InChar가 변수도 문자도 아님 - type_error(character, InChar)
  • OutChar가 변수도 문자도 아님 - type_error(character, OutChar)

Portability: ISO 술어. char_conversion/2(8.14.12절)와 같은 주의 사항.

더 알아보기