2014-05-17 74 views
0

我會開始說我對Prolog非常陌生,對於我來說,想出一個解決方案,而不是以程序或功能的方式來思考它是非常困難的。Prolog程序

問題的背景如下:我必須從初始位置(0,0)開始向四個方向移動。當我向上移動時,我將位置更新爲(0,1),向下(0,-1),向左移動至(-1,0),向右移動至(1,0)。在某些時候,我必須回到我的初始位置。

我已經解決了這個問題,記住了我所做的某些動作,然後做了相反的動作。所以,如果我所做的動作都是失敗的,那我就去西部去吧。該解決方案有效,但效率非常低下且愚蠢。

所以我想要做的事情是讓一個程序獲取當前位置(X,Y),並通過更新位置我更接近(0,0)來評估四個移動中的一個。

我試圖寫一些代碼,但事實是,我真的不知道如何在Prolog中思考問題。有人可以給我一些提示我如何解決它?謝謝!

回答

0

首先,您需要一種方法來表示您可以移動的法律方向。一個簡單的解決方案是使用原子up,down,leftright。接下來,您可以定義一個謂詞,給定一個位置和一個方向,計算得到的位置。例如:

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

如果要執行一系列移動,例如, [up, left, up, up, right, down],您可以定義另一個謂詞,該謂詞需要一個序列和一個初始位置,並計算最終位置,同時跟蹤所有中間位置(使用附加參數)。或者,您也可以向後追溯序列,追溯您的動作。你可以嘗試一下並用結果更新你的問題嗎?