수색…


기울기

리스트 는 특별한 종류의 복합 용어 입니다. 목록은 유도 적으로 정의됩니다.

  • atom []빈리스트 를 나타내는 리스트 이다.
  • 경우 Ls 목록 다음 용어 '.'(L, Ls) 또한리스트이다.

Prolog에는 편리하게 목록을 표시하는 특수 구문이 있습니다.

  1. 목록 '.'(a, '.'(b, '.'(c, [])))[a,b,c] 와 같이 쓸 수도 있습니다.
  2. '.'(L, Ls) 라는 용어는 [L|Ls] 로도 쓰일 수 있습니다.

이 표기법은 어떤 식 으로든 결합 될 수 있습니다. 예를 들어, [a,b|Ls] 라는 용어는 Ls 가 목록 인 경우 목록입니다.

목록 만들기

변수 List로 통합 된 리터럴로 구성된 목록입니다.

?- List = [1,2,3,4].
List = [1, 2, 3, 4].

consing으로 목록 작성 :

?- Tail = [2, 3, 4], List = [1|Tail].
Tail = [2, 3, 4],
List = [1, 2, 3, 4].

내장 length/2 사용하여 알 수없는 값 목록 작성 :

?- length(List,5).
List = [_G496, _G499, _G502, _G505, _G508].

프롤로그에서는 모든 것이 본질적으로 용어이므로 목록은 이기종으로 작동합니다.

?- List = [1, 2>1, this, term(X), 7.3, a-A].
List = [1, 2>1, this, term(X), 7.3, a-A].

즉, 목록에는 내부 목록이라고도하는 다른 목록도 포함될 수 있습니다.

List = [[1,2],[3,[4]]].

한 쌍

규칙에 따라, 펑터 (-)/2 는 종종 Prolog에서 요소 을 나타 내기 위해 사용됩니다. 예를 들어, -(A, B) 라는 용어는 AB 의 쌍을 나타냅니다. Prolog에서 (-)/2삽입 연산자 로 정의됩니다. 따라서이 용어는 AB 와 동등하게 쓰여질 수 있습니다.

일반적으로 사용 가능한 많은 술어도이 구문을 사용하여 쌍을 나타냅니다. 이것의 예는 keysort/2pairs_keys_values/3 입니다.

연관 목록

모든 심각한 Prolog 시스템에서 연관 목록 을 사용하면 요소 컬렉션에 대한 선형 액세스보다 빠른 액세스가 가능합니다. 이러한 연결 목록은 일반적으로 AVL 트리 와 같은 균형 잡힌 트리를 기반으로합니다. 많은 Prolog 시스템과 함께 제공되는 library(assoc) 라는 공개 도메인 라이브러리가 있으며 요소를 컬렉션에 삽입, 페치 및 변경하기위한 O (log (N)) 연산을 제공합니다.

자귀

매우 높은 수준에서 Prolog는 용어 라는 단일 데이터 유형 만 가지고 있습니다. 프롤로그에서는 모든 데이터가 프롤로그 용어로 표시됩니다. 용어는 유도 적으로 정의됩니다.

  • 원자 는 용어입니다. 원자의 예는 x , test'quotes and space' 입니다.
  • 변수 는 용어입니다. 변수는 대문자 또는 _ 합니다.
  • 정수 및 부동 소수점 숫자는 용어입니다. 예 : 4242.42 .
  • 다음 화합물 용어 유도 정의되는 용어이다 경우 T1 , T2 , ... T_n 용어는 다음 F ( T1 , T2 , ... T_n ) F가 펑의라고하는 용어는, 또한 복합 용어.

라이브러리 (레코드)를 사용하여 명명 된 필드의 용어

[record][1] 라이브러리는 명명 된 필드로 복합 용어를 생성하는 기능을 제공합니다. 지시문 :- record/1 <spec><spec> 정의 된 용어의 필드를 초기화, 설정 및 가져 오는 술어의 집합으로 컴파일합니다.

예를 들어, 명명 된 필드 xypoint 데이터 구조를 정의 할 수 있습니다.

:- use_module(library(record)).

:- record point(x:integer=0,
                y:integer=0).

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

?- default_point(Point), point_x(Point, X), set_x_of_point(10, Point, Point1).
Point = point(0, 0),
X = 0,
Point1 = point(10, 0).

?- make_point([y(20)], Point). 
Point = point(0, 20).

?-  is_point(X). 
false.

?- is_point(point(_, _)).
false.

?- is_point(point(1, a)).
false.

?- is_point(point(1, 1)).
true.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow