我學習的Prolog DCG語法*和**解析樹在伊萬·布拉科書有些疑惑:「編程人工智能」有關如何工作的意義謂詞解譯DCG語法解析樹在序言
下面的示例提供了一種DCG語法,它可以從屬於定義語言的字符串中創建一個分析樹,但我發現有些困難。
所定義的語言是一個機器人手臂的動作,可以是隻有兩種類型的列表:向上和向下所以[向上,向上,向下,向上,向上]屬於所定義的語言通過我的DCG語法。
該方案提供還一個含義/ 2謂詞解釋具有一定字符串和相關的語法分析樹指通過機器人臂越過距離(儘管它與拉昇值相關聯+ 1,和值-1到向下移動)
因此,例如,對於該列表[向上,向上,向下,向上,向上],所述意味着/ 2謂詞計算3距離
這是我的例子的代碼(工作做好):
move(move(Step)) --> step(Step).
move(move(Step, Move)) --> step(Step), move(Move).
step(step(up)) --> [up].
step(step(down)) --> [down].
/* Take the parse tree of a string that belong to the language defined by the DCC grammar and
calculate the total distance whereas that an up move give a +1 distance and a down move
give -1 distance
*/
meaning(move(Step, Move), Dist):-
/* Calculate the distance given by the current step node
(which can be +1 or -1) */
meaning(Step, D1),
/* Calculate the distance given by the current moove node
(which must be calculated recursively on a subtree having
a moove node as root */
meaning(Move, D2),
/* The final distance series of moves is the distance of the
current step + the distance diven from the moves in the
moove subtree */
Dist is (D1 + D2).
meaning(step(Step), Dist):- meaning(Step, Dist).
meaning(move(Step), Dist):- meaning(Step, Dist).
% step(up) means that the distance is +1
meaning(step(up), 1).
% step(down) means that the distance is -1
meaning(step(down), -1).
所以我有含義/ 2謂詞采取解析樹並計算移動的總距離。
所以,我有2 BASE CASE該rappresent關聯到單個移動(到步驟)之間的距離的值,即可以是1用於向下步向上步和-1:
meaning(step(up), 1).
meaning(step(down), -1).
的含義/ 2採取解析樹,通過將DCG文法所定義,具有一個舉動節點作爲根:這根將具有左孩子是一個步驟節點(因此它是一個單移動,所以它有一個特定的距離+1或-1)和一個正確的孩子是移動節點(所以它rappresent另一子樹)
所以總距離是當前步驟,其是1或的距離的總和-1 +(的當前移動根左子)距離在右子樹。
我認爲這是正確的,這對我來說
,我不明白事情很清楚是什麼東西代表了我這兩個謂詞代碼:
meaning(step(Step), Dist):- meaning(Step, Dist).
meaning(move(Step), Dist):- meaning(Step, Dist).
我可以不沾他們在我的推理:-(
是否真的有必要複製整個問題和書籍部分以獲取有關這四行代碼的幫助?另外,你是否試圖運行代碼?這些規則很明顯是這樣做的:他們讓你直接從DCG中對包裝事實調用「意義/ 2」。他們只是解開額外的結構層。 –