logo

프롤로그 프로그램

내장된 조건자, 목표 순서를 사용하거나 시스템 프롬프트에서 목표를 지정하는 것은 그 자체로는 거의 가치가 없습니다. Prolog 프로그램을 작성하려면 먼저 사용자가 Prolog 언어로 작성된 프로그램을 작성하고 해당 프로그램을 로드한 다음 프롬프트에서 하나 이상의 목표 시퀀스를 지정해야 합니다.

Prolog에서 프로그램을 생성하는 간단한 방법은 텍스트 편집기에 프로그램을 입력한 다음 다음과 같은 텍스트 파일로 저장하는 것입니다. 프롤로그1.pl .

다음 예는 Prolog의 간단한 프로그램을 보여줍니다. 프로그램에는 절이라고 하는 세 가지 구성 요소가 포함되어 있습니다. 각 절은 마침표를 사용하여 종료됩니다.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

내장된 조건자 '를 사용하여 찾다' , 위의 프로그램은 Prolog 시스템에 로드될 수 있습니다.

?-consult('prolog1.pl').

이는 prolog1.pl 파일이 존재하고 프롤로그 프로그램이 시스템적으로 정확하다는 것을 보여줍니다. 즉, 유효한 절이 있고 목표가 성공하며 프로그램이 올바르게 읽혔는지 확인하기 위해 하나 이상의 출력 라인을 생성합니다. 예를 들어,

?-
# prolog1.pl을 참조하는 데 0.00초
?-

클래스 대 객체 자바

'consult'의 대안은 'Load'이며, 이는 Prolog 시스템에 그래픽 사용자 인터페이스가 있는 경우 메뉴 옵션에 있습니다.

프로그램이 로드되면 해당 절이 저장 영역에 배치되며 해당 저장 영역을 Prolog 데이터베이스라고 합니다. 시스템 프롬프트에 응답하여 일련의 목표를 지정하면 Prolog가 목표를 평가하는 데 필요한 조항을 검색하고 사용하게 됩니다.

술어

다음 프로그램에서는 세 줄에 절이 표시됩니다.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

마침표를 사용하면 각 절이 종료됩니다. 프롤로그 프로그램에는 일련의 절이 있습니다. 사실이나 규칙은 이 조항으로 설명됩니다.

의 예 사리 ~이다 개(로트와일러) 그리고 고양이(먼치킨) . 그 뜻은 ' 애마 개다' 그리고 ' 먼치킨 고양이야'.

개는 술어라고 불립니다. Dog에는 하나의 인수가 포함되어 있습니다. 단어 ' 애마' 괄호( ) 안에 들어있습니다. 로트와일러는 원자라고 불립니다.

규칙의 예는 프로그램의 마지막 줄입니다.

 animal(A) :- dog(A). 

콜론(:-) 문자는 'if'로 읽혀집니다. 여기서 A는 변수이며 모든 값을 나타냅니다. 자연스럽게 이 규칙은 'A가 동물이면 A는 개이다'로 읽을 수 있습니다.

위 조항은 다음을 보여줍니다. 애마 동물이다. 이러한 추론은 Prolog를 통해서도 가능합니다.

?- 동물(로트와일러).

을 암시하기 위해 먼치킨 동물인데 이에 대한 증거는 없습니다.

?- 동물(먼치킨).
아니요

추가 용어

목표 항을 평가하면 만족 여부가 결정됩니다. 이는 또한 목표가 참 또는 거짓으로 평가된다는 것을 의미합니다.

사용자가 목표를 입력하면 때로는 명령으로 해석될 수도 있습니다. 예를 들어,

?- 멈춰요. '프롤로그 시스템을 종료하는데 사용됩니다.'

때로는 다음과 같은 질문으로 간주될 수도 있습니다.

?- 동물(로트와일러). & '로트와일러는 동물인가요?'

다음 프로그램은 동물에 관한 또 다른 예를 보여줍니다. 이는 8개의 조항으로 구성됩니다. 주석은 /*와 */ 사이의 모든 텍스트로 표시됩니다.

 /* Another Program of Animal */ Dog(rottweiler). cat(sphynx). dog(poodle). dog(bulldog). cat(bengal). dog(dobermann). cat(himalayan). cat(singapura). /* This Prolog program consists of various clauses. It is always terminated using the full stop.*/ 

술어 개와 술어 고양이 모두 4개의 절을 가지고 있습니다. 텍스트 파일 'animal.pl'에 프로그램이 저장되었고 프로그램을 로드하여 출력이 생성되었으며 시스템 프롬프트에서 다음과 같이 일련의 목표를 입력한다고 가정합니다.

?- Consult('animals1.pl'). 시스템 프롬프트
# Animals.pl 상담에 0.01초 상담을 사용하여 로드된 Animals.pl

?- 개(로트와일러).

?- 개(복서).
아니요

?- 개(A).
A = 로트와일러가 일시 중지됩니다. 사용자가 리턴 키를 눌렀습니다.

?- 개(B).
B = 로트와일러; 일시중지? 사용자가 ;
B = 푸들; 일시중지? 사용자가 ;
B = 불독; 일시중지? 사용자가 ;
B = 도베르만 일시 중지하지 않으시겠습니까? 다음 줄로 넘어갈 거예요

?- 고양이(A). A = 스핑크스; 정지시키다 ? 사용자 프레스;
A = 벵골이 일시정지합니까? 사용자가 Return 키를 누름

?- 듣기(개). 술어 개를 정의하는 모든 절을 나열합니다.

/* 개/1 */

개(로트와일러).
개(푸들).
개(불독).
개(도베르만).

?-

이 예에서는 Prolog의 다양한 새로운 기능이 소개됩니다. 쿼리는 다음과 같습니다.

?- 개(A).

A의 값을 구하면 강아지의 이름이 된다는 뜻입니다. Prolog의 답변은 다음과 같습니다.

A = 로트와일러

A의 다른 가능한 대답은 다음과 같습니다. 푸들, 불독, 도베르만. 이는 Prolog 일시 중지를 유발하고 이로 인해 시스템 프롬프트 ?-를 출력하기 전에 사용자가 'return' 키를 누를 때까지 기다려야 합니다.

다음과 같이 다음 쿼리를 입력할 수 있습니다.

?- 개(B).

이 쿼리는 이전과 동일합니다. 위 쿼리는 'B의 값을 구하면 개의 이름이 된다'는 뜻이다. Prolog의 답변은 다음과 같습니다.

B = 로트와일러

Java의 목록 정렬

프롤로그가 다시 일시 중지됩니다. 이번에는 사용자가 세미콜론(;) 키를 눌렀습니다. 이제 Prolog는 목표 개(B)를 만족하는 대체 값 B를 찾습니다. 다음과 같이 응답합니다.

B = 푸들

프롤로그가 다시 일시 중지됩니다. 사용자가 세미콜론(;) 키를 다시 누릅니다. Prolog는 다음과 같은 추가 솔루션을 생성합니다.

B = 불독

프롤로그가 다시 일시 중지됩니다. 사용자가 세미콜론(;) 키를 다시 누릅니다. Prolog는 다음과 같은 추가 솔루션을 생성합니다.

B = 도베르만

Prolog는 일시 중지하지 않고 더 이상 사용 가능한 솔루션이 없음을 인식하지만 시스템 프롬프트는 ?-즉시 출력으로 이동합니다.

이 예에서는 새로운 내장 조건자가 도입되었습니다. 목표 지정

?- 목록(개)

위의 목표에서 Prolog는 술어 독을 정의하는 4개의 절을 모두 나열합니다. 데이터베이스에 로드된 것과 동일한 순서로 정의됩니다.

쿼리에서 변수를 사용하는 방법은 다음 예에 나와 있습니다. 목표 순서는 다음과 같습니다.

?-고양이(A),개(B).

이것은 우리에게 고양이와 개의 가능한 모든 조합을 제공할 것입니다.

?-고양이(A),개(B).
A = 스핑크스,
B = 로트와일러;

텍스트 래퍼 CSS

A = 스핑크스,
B = 푸들;

A = 스핑크스,
B = 불독;

A = 스핑크스,
B = 도베르만;

등.

이에 비해 목표 순서는 다음과 같습니다.

?-고양이(A), 개(A).

그러면 고양이와 개가 모두 포함된 모든 동물이 제공됩니다(데이터베이스에는 그러한 동물이 없습니다). 여기서 A는 cat(A)와 dog(A) 모두에서 '모든 값'이지만 둘 다 동일한 값을 가져야 합니다.

?-고양이(A),개(A).
아니요