首页 文章

Prolog程序

提问于
浏览
0

我首先要说的是我对Prolog很新,而且我仍然很难提出一个解决方案,而不是以程序或功能的方式来思考它 .

问题的背景如下:我必须从初始位置(0,0)开始向四个方向移动 . 当我向上移动时,我将我的位置更新为(0,1),向下更新为(0,-1),向左更新为(-1,0),向右更新为(1,0) . 在某些时候,我必须回到我的初始位置 .

我通过记住我所做的所有动作到某一点然后反过来解决了这个问题 . 因此,如果我所做的动作是失败的,那么我只是向上,向西 . 解决方案有效,但效率很低而且很愚蠢 .

所以我想要做的是制作一个程序,它接受当前位置(X,Y)并评估四个移动中的一个,如果通过更新位置我更接近(0,0) .

我试着写一些代码,但事实是我真的不知道如何在Prolog中思考这个问题 . 有人可以给我一些提示,我可以解决它吗?谢谢!

1 回答

  • 0

    首先,您需要一种方法来表示您可以移动的合法方向 . 一个简单的解决方案是使用原子 updownleftright . 接下来,您可以定义一个谓词,给定位置和方向,计算结果位置 . 例如:

    move((X,Y), up, (X,NewY)) :- NewY is Y + 1.
    ...
    

    如果要执行一系列移动,例如 [up, left, up, up, right, down] ,您可以定义另一个带有序列和初始位置的谓词,并计算最终位置,同时跟踪所有中间位置(使用附加参数) . 作为替代方案,您也可以向后工作,回溯您的动作 . 你可以尝试一下并用结果更新你的问题吗?

相关问题