2011-11-25 2 views
4

논리 펑 작업.나는 그런</p> <p><code>not(X), conj(X, Y), some(Y, K).</code> 같은 논리 연산을 갖고 싶어하고 내가 그들을 반복 할 수 있도록하려면 프롤로그

예를 들어 나는 (Y, K)가 아닌 (Y, K가 아님)으로 변환 할 수 있기를 원합니다.

나는 그 (것)들에게 어떤 특별한 의미가 있기를 원하지 않는다, 나는이 방법으로 논리적 인 공식으로 일하고 싶다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 나는 약간의 (a,하지 (B)), 그러나 기압 내가 얻는 방법을 모르는 돌아 가야 할 not(all(a,b)) 그것을 포기한다면

nnf(not(all(X, Y)) ,some(Z, W))  :- nnf(X, Z), nnf(not(Y), W). 

:

여기 내 코드의 실제 라인이다 이러한 방법으로 not/1all/2을 처리하는 프롤로그.

답변

2

여기서 가장 좋은 방법은 없습니다. 그것은 당신의 특별한 용도에 조금 달려 있습니다.

귀하의 질문은 본질적으로 다음으로 줄어 듭니다. 기본 용어로? 그것은 (프롤로그) 가변 자유 표현입니다. 또는 프롤로그 변수로 직접.

우선 지상 표현을 먼저 시도해 보겠습니다. 어쩌면 Nr을 정수로 사용하여 v(Nr)을 시도해보십시오. 상대적으로 빈번한 것은 writeq/1으로 인식되는 '$VAR'(Nr)입니다. 하지만 처음에는 v/1을 사용합니다.

+0

안녕하세요, 빠른 답장을 보내 주셔서 감사합니다. 그러나 나는 당신이 의미하는 것을 정말로 이해하지 못합니다. 나는 이런 식으로 뭔가를 할 수 있어야한다. (어떤 (a, b))와 같은 것을주고, 모든 것을 되 찾을 수 있어야한다. (a, not (b)). – user1066113

+1

your_function (not (some (X, Y)), all (X, not (Y))). 이 특별한 경우에는 충분합니다. 당신은 무엇을 일반화하고 싶습니까? – m09

1

Thea project을 살펴보십시오. 그것은 OWL2 온톨로지를 조작하기위한 Prolog 라이브러리를 개발합니다. 어쩌면 그들은 이미 부정형 정규 형식 변환을 구현했습니다.