人工智能谓词逻辑——猴子摘香蕉问题

案例:

我们要实现以下步骤:让猴子得到香蕉,但是直接跳够不到,必须站在箱子上才能取到

这个案例共有以下几种情况,猴子香蕉箱子在同一处,猴子香蕉在同一处,香蕉箱子在同一出,还有三者均不在同一处,但不论是哪种情况,我们需要清楚一点就算是香蕉和猴子在同一位置,猴子也无法直接获得香蕉,因此我们第一步必须需要先找到箱子,然后再去搬着箱子移动到香蕉处。


本案例中有以下四个谓词逻辑:

  • Run(monkey,box) 代表猴子去搬箱子

  • Getbox(monkey,box) 代表猴子得到了箱子

  • Run(monkey,banana) 代表了猴子搬着箱子去找香蕉

  • Getbanana(monkey,banana) 代表猴子拿到了香蕉


 代码(c语言版):

#include <stdio.h>
int main(){
	void gobox(int a,int b);
	void getbox(); 
	void findbanana(int a,int b);
	void getbanana();
	int monkey,banana,box;
	printf("请依次输入猴子,香蕉,箱子 的位置\n");
    printf("猴子的位置:");
	scanf("%d",&monkey);
	printf("香蕉的位置:");
	scanf("%d",&banana);
	printf("箱子的位置:");
	scanf("%d",&box);
	printf("-----------------------------------\n");
	if(monkey!=box){
		printf("猴子够不到香蕉,要先去搬箱子:");
		gobox(monkey,box);
		getbox();
		if(box!=banana){
		  printf("猴子需要搬着箱子去找到香蕉:");
		  findbanana(banana,box);
		  getbanana();
	    }else{
	    	printf("香蕉就在箱子的上面\n");
	    	getbanana();
		}
	}else{
		printf("箱子就在猴子旁边,猴子拿到了箱子"); 
		getbox();
		  if(box!=banana){
		  printf("猴子需要搬着箱子去找到香蕉:");
		  findbanana(banana,box);
		  getbanana();
	      }else{
	    	printf("香蕉就在箱子的上面\n");
	    	getbanana();
		  }	
	} 
} 
void gobox(int a,int b){ 
	int flag;
	flag = b - a;
	if(flag>0){
		printf("Run(monkey,box)\n");
		printf("猴子需要向右移动%d步拿到箱子\n",flag);
	}else{
		printf("Run(monkey,box)\n");
		printf("猴子需要向左移动%d步拿到箱子\n",flag);
	}
}
void findbanana(int a,int b){
	int flag;
	flag=b-a;
	if(flag>0){
		printf("Run(monkey,banana)\n");
		printf("猴子需要向左搬着箱子移动%d步找到香蕉\n",flag);
	}else{
		printf("Run(monkey,banana)\n");
		printf("猴子需要向右搬着箱子移动%d步找到香蕉\n",flag);
	} 
} 
void getbox(){
	printf("猴子拿到了箱子:");
	printf("Getbox(monkey,box)\n");
}
void getbanana(){
	printf("猴子踩在箱子上拿到了香蕉:");
	printf("Getbanana(monkey,banana)\n");
}

效果演示:

三者不在同一位置:

箱子和香蕉在同一位置:

 三者均在同一位置:

猜你喜欢

转载自blog.csdn.net/weixin_52212950/article/details/123662272