我需要檢查路徑是否有效,是或否。它是這樣給出的:Prolog Path搜索指針
?-path(a,b,[(a,c),(c,d),(d,b)]).
true
在列表部分,我如何訪問a或c中的(a,c)?它是否就像一個字符串「(a,c)」?
一般來說,如何解決這種類型的路徑查找?示例代碼/僞讚賞。有沒有辦法讓它解釋列表中的元組()作爲謂詞?
我需要檢查路徑是否有效,是或否。它是這樣給出的:Prolog Path搜索指針
?-path(a,b,[(a,c),(c,d),(d,b)]).
true
在列表部分,我如何訪問a或c中的(a,c)?它是否就像一個字符串「(a,c)」?
一般來說,如何解決這種類型的路徑查找?示例代碼/僞讚賞。有沒有辦法讓它解釋列表中的元組()作爲謂詞?
我給你當我是二年級的學生爲例:
% Representation [[a,b],[b,a],[b,c]]:
%
% a <--> b -->c
%
% Does aexists a path beetween X and Y?
% Example: path(c,b,[[a,b],[b,c],[d,e],[c,d],[b,e],[e,c],[e,f],[a,a]]). No
% path(c,f,[[a,b],[b,c],[d,e],[c,d],[b,e],[e,c],[e,f],[a,a]]). Yes
path(X,Y,G):-pathAux(X,Y,G,[]).
pathAux(X,Y,G,_T):-member([X,Y],G).
pathAux(X,Y,G,T) :-member([X,Z],G),not(member([X,Z],T)),
append([[X,Z]],T,Tt),pathAux(Z,Y,G,Tt).
我用[A,B]代替(A,B);但它是一樣的。
的(A,C)是一個複合詞,您可以訪問它的謂詞是這樣的:
my_predicate((A, B)) :-
print(A),
print(B).
這已經有一段時間,但我的頭的頂部,您可以下手:
path(S, G, [(P, Q) | R]) :- ......
用S表示開始,G意思是目標,P和Q是圖中連接的節點,R是圖的其餘部分。
你在那裏有幾個問題...
是它像一個字符串 「(A,C)」?
「like」是什麼意思?他們是否統一?不。
?- "(a, c)" = (a, c).
No
在列表中的一部分,我怎麼訪問 A或C中(A,C)?
?- L = [(a, c) | _], L = [(A, C) | _].
L = [ (a, c)|_G184],
A = a,
C = c
有沒有辦法讓它解釋 在列表中的元組()作爲 謂詞?
也許使用call/N
,但您爲什麼要這麼做?
在詢問之前,您可能會很方便地閱讀您的老師確實提供的參考書目......您將瞭解更多信息! – fortran 2009-11-03 17:50:30
你確實是對的。所以你不應該直接給出答案,只要指出我的方向是正確的。 – Algific 2009-11-03 17:57:17