2012-01-24 5 views
0

프롤로그 프로그램에서 apple 사과가 빨간색 또는 녹색을 의미해야합니다. 저는 여기에 구현 된 코드의 예입니다프롤로그에서 표현하고 OR 함수를 사용하십시오

:-dynamic(red/1). 

:-dynamic(green/1). 

apple(a). 

apple(b). 

apple(A):-red(A);green(A). 

내 문제는 이것이 내가 동적를 놓고 지금 ?-red(a)?-green(a)가 false를 반환 할 주어진 사실이 아니기 때문에 ?- red(a)?-green(a)가 false를 반환해야한다는 것입니다. 사과가 당신의 응답을 빨간색 또는 녹색

감사 중 하나이기 때문에 그러나 red(A);green(A). true를 돌려 : 나 모든 문제가 그 것이다 그러나 - 빨강 (a)와 별도로 실행할 때 녹색의 (a) 모두 surpose가 false를 반환한다. ? -red (a), 녹색 (a)은 true를 반환해야합니다. 이것은 내가 잃어버린 곳입니다. 결과를 얻는 방법에 대한 제안이 있으면 크게 환영 할 것입니다.

+0

여러분 께 감사드립니다. –

+0

@ChrisMartin : 편집 내용이별로 개선되지 않았습니다 ... – false

답변

0

다음을 고려한 경우 : - "implied by"또는 "true if"를 의미하는 경우 최종 규칙이 거꾸로 있음을 알 수 있습니다 (예 : 빨간색 또는 녹색 인 경우 사과입니다). 게다가 Prolog는 OR을 포함하는 추론을 그릴 수는 없습니다. 따라서, 당신이 올 수있는 가장 가까운 다음이다 : 그것은 사과이며, 사과의 경우 뭔가가 녹색이면

입니다
red(X) :- apple(X). 
green(X) :- apple(X). 

, 뭔가 빨간색입니다. 예, 이것은 사과라면 빨간색과 초록색이 모두 있다는 것을 증명할 수 있지만, 역시 가지고 있지 않다는 것을 증명할 수 있다는 의미입니다. 사과가되는 것을 사용하면 red(A); green(A)이 성공한다는 요구 사항을 충족시킬 것입니다. red(A)green(A)이 동시에 둘 다 true가 될 수 없다면, 그 이상의 작업이 필요합니다.

+0

여러분에게 감사드립니다. 그러나 모든 문제는? -red (a)와 green (a)가 모두 있습니다. ? -red (a)가 false 일 때는 surpose, green (a)는 true를 반환해야합니다. 이것은 내가 잃어버린 곳입니다. 너희들이 거기에 오는 방법에 대한 제안이 있다면 크게 환영 할 것이다. 그 –

+0

빨간색 (a) 또는 녹색 (a)이 개별적으로 사실이 아닌 경우 어떻게 빨간색 (a) 또는 녹색 (a)이 참이 될 수 있습니까? 빨간색 또는 초록색 사과라면 뭔가 사과라고 말하지만 그 중 하나이어야하고 다른 사과가 다른 색일 수 있다는 규칙을 가질 수 있습니다. –

관련 문제