술어 정보

술어 정보

정의된 프로시저에 관한 정보를 얻는 술어들을 설명해요.

출처: GNU Prolog Manual - Predicate information

본문

current_predicate/1

Templates

current_predicate(?predicate_indicator)

Description current_predicate(Pred)Pred와 통일되는 정의된 프로시저의 술어 표시자가 존재하면 성공해요. 모든 사용자 정의 프로시저는 정적이든 동적이든 찾을 수 있어요. 이름이 '$'로 시작하는 내부 시스템 프로시저는 찾을 수 없어요. 사용자 정의 프로시저는 절이 없어도 찾을 수 있어요. 사용자 정의 프로시저는 abolish 되었으면 찾을 수 없어요.

ISO 참조를 따르기 위해 내장 술어는 찾을 수 없어요(strict_iso Prolog 플래그가 꺼져 있지 않으면)(8.22.1절). 이 술어는 백트래킹 시 재실행 가능해요.

Errors

  • Pred가 변수도 술어 표시자도 아님 - type_error(predicate_indicator, Pred)
  • PredName/Arity 항이고 Arity가 변수도 정수도 아님 - type_error(integer, Arity)
  • PredName/Arity 항이고 Name이 변수도 원자도 아님 - type_error(atom, Name)
  • PredName/Arity 항이고 Arity가 정수 < 0 - domain_error(not_less_than_zero, Arity)
  • PredName/Arity 항이고 Aritymax_arity 플래그(8.22.1절)보다 큰 정수 - representation_error(max_arity)

Portability: ISO 술어.

predicate_property/2

Templates

predicate_property(?callable, ?predicate_property)

Description predicate_property(Head, Property)Head가 속성 Property를 가진 술어를 참조하면 성공해요. 모든 사용자 정의 프로시저와 내장 술어를 찾을 수 있어요. 이름이 '$'로 시작하는 내부 시스템 프로시저는 찾을 수 없어요. 이 술어는 백트래킹 시 재실행 가능해요.

버전 1.4.0부터 predicate_property/2는 더 이상 술어 표시자를 받지 않아요. 제어 구조가 이제 반환돼요. 속성 built_in_fdcontrol_construct는 이제 built_in 속성을 암시해요.

술어 속성:

  • static - 프로시저가 정적인 경우.
  • dynamic - 프로시저가 동적인 경우.
  • private - 프로시저가 비공개인 경우.
  • public - 프로시저가 공개인 경우.
  • monofile - 프로시저가 단일파일인 경우.
  • multifile - 프로시저가 멀티파일인 경우.
  • user - 프로시저가 사용자 정의 프로시저인 경우.
  • built_in - 프로시저가 내장 술어 또는 제어 구조인 경우.
  • built_in_fd - 프로시저가 FD 내장 술어인 경우.
  • control_construct - 프로시저가 제어 구조인 경우(7.2절).
  • native_code - 프로시저가 네이티브 코드로 컴파일된 경우.
  • prolog_file(File) - 프로시저를 읽은 소스 파일.
  • prolog_line(Line) - 소스 파일의 줄 번호.
  • meta_predicate(Head) - 프로시저가 메타-술어이면 Head를 머리-패턴과 통일. 머리-패턴은 술어와 같은 이름과 아리티를 가진 복합 항이며, 항의 각 인자는 메타 인자 지정자(meta argument specifier)로, 다음과 같아요:
    • 정수 N - 인자가 주어진 인자 항보다 N개 더 많은 인자를 가진 술어를 참조하는 데 사용되는 항(예: call(0)).
    • : - 인자가 모듈에 민감하지만 직접적으로 술어를 참조하지는 않음(예: consult(:)).
    • - - 인자가 모듈에 민감하지 않고 진입 시 unbound.
    • ? - 인자가 모듈에 민감하지 않고 모드가 불특정.
    • + - 인자가 모듈에 민감하지 않고 진입 시 bound(즉 nonvar).

Errors

  • Head가 변수도 callable 항도 아님 - type_error(callable, Head)
  • Property가 변수도 술어 속성 항도 아님 - domain_error(predicate_property, Property)
  • Property = prolog_file(File)이고 File이 변수도 원자도 아님 - type_error(atom, File)
  • Property = prolog_line(Line)이고 Line이 변수도 정수도 아님 - type_error(integer, Line)

Portability: GNU Prolog 술어.

더 알아보기