2011-03-26 3 views
2

빈 데이터베이스로 시작합니다. 나는이 같은 항목을 추가하고Prolog : 추가하기 전에 항목이 데이터베이스에 있는지 확인하려면 어떻게합니까?

person(John,male) 
person(Veronica,female) 
person(Jessica,female) 

: 나는 예를 들어, 일부 데이터베이스 항목을 추가 할 필요가

add_person(N,G):-asserta(person(N,G)). 

Howerver, 나는 두 번 같은 사람을 추가하고 싶지 않아, 그래서 필요 추가하기 전에 확인하십시오.

나는 이런 식으로 일을하려고 오전 : 내 데이터베이스가 비어있는 경우

add_person(N,G):- \+ person(N,G),asserta(person(N,G)). 

문제는 내가 가진 데이터베이스를 조회 할 수 없다는 것입니다, person(John,male)을 말한다. 따라서 person(N,G)은 존재 오류로 실패하고 전혀 추가 할 수 없습니다.

의견이 있으십니까?

답변

2

내가 사용중인 프롤로그의 어떤 변형 모르겠지만, 당신은 당신의 코드 상단에이 줄을 넣어 몇 가지 조건이 동적으로 선언 할 수 있습니다 : 이것은에 설명되어

:- dynamic person/2. 

SWI-Prolog documentation.

+0

저는 GNU Prolog를 사용하고 있습니다. 따라서 명령의 올바른 구문은': -dynamic (person/2) .'입니다. 도움을 많이 주셔서 감사합니다! – Serpent

2

작성하는 방법 John은 변수가 아니라 원자입니다. 원자에는 소문자 만 사용해야합니다 (john, veronica 등). 난 그냥 코드를 시도하고 그것을 잘 작동합니다 :

person(john, male). 

add_person(N,G):- 
    \+ person(N,G), 
    asserta(person(N,G)). 

다시 john 추가에 실패하고 false를 반환합니다.

+0

예, 작동합니다. 나는 db가 데이터를 가지고 있지 않을 때 실존 예외에 빠지지 않는 방법을 알아 내야 만했다. 동적 술어를 사용하여 일했습니다! – Serpent

관련 문제