2009-12-03 6 views
5

나는 프롤로그를 처음 사용하고 있으며, 지금까지 파일에 술어를 정의하고이를 사용하기 위해 인터프리터를 실행하는 방법을 배웠다. 그러나 앞뒤로 전환 할 필요가 없도록? 프롬프트에서 술어를 정의하는 방법이 있는지 알고 싶습니다.프롤로그에 술어를 정의하는 방법

내가 지금 뭐하는 거지 방법이

파일 defs.pl 같다 : 방법을 정의하는 어쩌면 내가 의미

?- consult('defs.pl'). 
% defs.pl compiled 0.00 sec, 122 bytes 
true. 
?- adjacent(1,2). 
true. 

편집 : 프롤로그 인터프리터

adjacent(1,2). 
adjacent(1,3). 

'사실'나는 잘 모르겠다. 당신이 파일에 정의 술어와 결합하려고하면이 작동하지 않습니다, 그런데 :

?- assert(adjacent(1,4)). 
true 

편집 :

답변

9

당신은 assert/1 술어를 사용할 수 있습니다. 따라서 파일에있는 모든 인접/2 술어를 정의하거나 명령 행에서 모두 assert로 정의하십시오. 당신이 어설와 파일의 조건, 그리고 다른 사람의 일부를 정의 할 경우

, 다음 술어가 동적 파일에 선언

% file contents 
:- dynamic(adjacent/2). 
adjacent(1,2). 
adjacent(1,3). 
4

당신이 할 수있는

?- consult(user). 

또는

그 다음에 절을 입력 한 다음 파일 ch aracter (Linux의 경우 Ctrl-D, MS-Windows의 경우 Ctrl-Z 일 수 있음). 이것은 파일 읽기와 같습니다 (the documentation of consult/1 참조).

assert/1 및 retract/1은 일반 프로그래밍이 아닌 코드에 의해 동적으로 변경되는 (즉, 전역 데이터를 저장하는) 술어를위한 것입니다.

+0

나는 그것이 아마도 그들이 설계 한 것에 동의하지만 신속하게 프롤로그를 테스트하고 학습하는 데 사용할 수 있기 때문에 문제를 보지 못합니다. 오버 헤드는 걱정할 필요가 없습니다. 당신의 솔루션은 더 깨끗하다고 ​​생각하지만, 추가 할 때 이미 정의한 모든 술어를 다시 입력해야합니다. – catchmeifyoutry

관련 문제