人工智能谓词逻辑——猴子摘香蕉问题
案例:
我们要实现以下步骤:让猴子得到香蕉,但是直接跳够不到,必须站在箱子上才能取到
这个案例共有以下几种情况,猴子香蕉箱子在同一处,猴子香蕉在同一处,香蕉箱子在同一出,还有三者均不在同一处,但不论是哪种情况,我们需要清楚一点就算是香蕉和猴子在同一位置,猴子也无法直接获得香蕉,因此我们第一步必须需要先找到箱子,然后再去搬着箱子移动到香蕉处。
本案例中有以下四个谓词逻辑:
-
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("请依次输入猴子,香蕉,箱子 的位置 "); printf("猴子的位置:"); scanf("%d",&monkey); printf("香蕉的位置:"); scanf("%d",&banana); printf("箱子的位置:"); scanf("%d",&box); printf("----------------------------------- "); if(monkey!=box){ printf("猴子够不到香蕉,要先去搬箱子:"); gobox(monkey,box); getbox(); if(box!=banana){ printf("猴子需要搬着箱子去找到香蕉:"); findbanana(banana,box); getbanana(); }else{ printf("香蕉就在箱子的上面 "); getbanana(); } }else{ printf("箱子就在猴子旁边,猴子拿到了箱子"); getbox(); if(box!=banana){ printf("猴子需要搬着箱子去找到香蕉:"); findbanana(banana,box); getbanana(); }else{ printf("香蕉就在箱子的上面 "); getbanana(); } } } void gobox(int a,int b){ int flag; flag = b - a; if(flag>0){ printf("Run(monkey,box) "); printf("猴子需要向右移动%d步拿到箱子 ",flag); }else{ printf("Run(monkey,box) "); printf("猴子需要向左移动%d步拿到箱子 ",flag); } } void findbanana(int a,int b){ int flag; flag=b-a; if(flag>0){ printf("Run(monkey,banana) "); printf("猴子需要向左搬着箱子移动%d步找到香蕉 ",flag); }else{ printf("Run(monkey,banana) "); printf("猴子需要向右搬着箱子移动%d步找到香蕉 ",flag); } } void getbox(){ printf("猴子拿到了箱子:"); printf("Getbox(monkey,box) "); } void getbanana(){ printf("猴子踩在箱子上拿到了香蕉:"); printf("Getbanana(monkey,banana) "); }
效果演示:
三者不在同一位置:
箱子和香蕉在同一位置:
三者均在同一位置:
上一篇:
JS实现多线程数据分片下载