2010-03-11 12 views
4

데이터베이스 파일을로드 한 후에 assert를 사용할 수 있도록 동적 규칙을 만들고 싶다면 어떻게해야합니까? 나는 파일이 같은 것입니다 순간에 XSB 프롤로그를 사용하고 있습니다 :프롤로그의 "동적"조건 자

? consult('D:\file.P). 
not permitted to assert to static predicatelikes/2 
forward continuation...blahblah 

어떤 아이디어 :

:- dynamic likes/2 

likes(mary,tom) 

내가 XSB를 가진 파일을 참조하려고 내가 오류가?

답변

7

동적 조건자는 예상 한대로 작동하므로, 작동하지 않는 경우 다른 문제가 있습니다.

test.P은 다음과 같습니다 경우 : 그것은 협의 후 더/2 사실을 주장 할 수 있습니다 좋아 할 수

:- dynamic likes/2. 

likes(mary,tom). 

:

XSB Version 3.2 (Kopi Lewak) of March 15, 2009 
[i686-pc-linux-gnu; mode: optimal; engine: slg-wam; scheduling: local; word size: 32] 

| ?- consult('test.P'). 
[Compiling ./test] 
[test compiled, cpu time used: 0.0440 seconds] 
[test loaded] 

yes 
| ?- assert(likes(mary, bob)). 

yes 
| ?- likes(X,Y). 

X = mary 
Y = tom; 

X = mary 
Y = bob; 
+0

그게 정말 오히려 이상한 - 내가 동일 할 그게 이상한 실수 야! 나는 "허용되지 않는 어쩌구 ..."라는 것을 이해하려고 노력하고 있습니다! – KP65

+0

방금 ​​XSB 버전 3.2에서 동일한 파일을 테스트했지만 정상적으로 작동하는 것으로 보입니다. 그러나 2.7.1을 다른 것으로 사용해야합니다 (사용하고 있습니다.) (interprolog) ... 2.7.1에서 같은 파일을 사용해 볼 수 있습니까? 내가 본 것을 알려주시겠습니까? 감사합니다. – KP65

+0

XSB 2.7을 사용해 보았습니다. 오류가 발생하여 해당 버전 이후의 동작이 변경되었습니다. 그러나 전체 파일을 컴파일하는 대신 동적으로로드하는 load_dyn ('test.P')을 사용하여 파일을로드 할 수있었습니다. (파일에서 : - 동적 라인을 제거하십시오.) 그러면 test.P의 것 외에 더 많은 likes/2 개의 규칙을 지정할 수 있습니다. 동적 코드로드에 대한 설명서는 다음을 참조하십시오. http://www.cs.sunysb.edu/~sbprolog/manual2/node5.html –