我有以下包含歐洲火車連接的 prolog 知識庫:
connection(paris, barcelona).
connection(barcelona, madrid).
connection(madrid, lisbon).
connection(paris, brussels).
connection(brussels, amsterdam).
connection(amsterdam, hamburg).
connection(hamburg, berlin).
我想創建一個謂詞ride/3,它可以在不創建串列的情況下繪制路線。這三個引數應該是 1. 起點 2. 終點 3. 路線,它應該是一個謂詞 fromTo/2。
一個例子:
?- ride(paris,lisbon,X).
X = fromTo(paris,barcelona, fromTo(barcelona,madrid,
fromTo(madrid,lisbon)))
我認為基本條款應該與此類似,但這給了我一個錯誤。
ride(X,Y,go(X,Y):- connection(X,Y)
uj5u.com熱心網友回復:
您收到錯誤,因為您的基本情況缺少括號。同樣從您的預期輸出來看,第三個引數應該是fromTo(X,Y).
您的遞回子句應該是從 開始X,轉到Z然后遞回呼叫自身但現在從Z到Y:
ride(X, Y, fromTo(X, Y)):-
connection(X, Y).
ride(X, Y, fromTo(X, Z, Chain)):-
connection(X, Z),
ride(Z, Y, Chain).
示例運行:
?- ride(paris,lisbon,X).
X = fromTo(paris, barcelona, fromTo(barcelona, madrid, fromTo(madrid, lisbon))) ;
false.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/371674.html
下一篇:使用其根將樹存盤為字典
