我首先要说的是我对Prolog很新,而且我仍然很难提出一个解决方案,而不是以程序或功能的方式来思考它 .
问题的背景如下:我必须从初始位置(0,0)开始向四个方向移动 . 当我向上移动时,我将我的位置更新为(0,1),向下更新为(0,-1),向左更新为(-1,0),向右更新为(1,0) . 在某些时候,我必须回到我的初始位置 .
我通过记住我所做的所有动作到某一点然后反过来解决了这个问题 . 因此,如果我所做的动作是失败的,那么我只是向上,向西 . 解决方案有效,但效率很低而且很愚蠢 .
所以我想要做的是制作一个程序,它接受当前位置(X,Y)并评估四个移动中的一个,如果通过更新位置我更接近(0,0) .
我试着写一些代码,但事实是我真的不知道如何在Prolog中思考这个问题 . 有人可以给我一些提示,我可以解决它吗?谢谢!
1 回答
首先,您需要一种方法来表示您可以移动的合法方向 . 一个简单的解决方案是使用原子
up
,down
,left
和right
. 接下来,您可以定义一个谓词,给定位置和方向,计算结果位置 . 例如:如果要执行一系列移动,例如
[up, left, up, up, right, down]
,您可以定义另一个带有序列和初始位置的谓词,并计算最终位置,同时跟踪所有中间位置(使用附加参数) . 作为替代方案,您也可以向后工作,回溯您的动作 . 你可以尝试一下并用结果更新你的问题吗?