路徑/小徑/步行的定義許多謂詞定義了一種由通過二進(jìn)制關(guān)系定義的邊緣構(gòu)建的非循環(huán)路徑,非常類似于定義傳遞閉包..因此需要一個(gè)通用定義。請(qǐng)注意,圖論中定義的概念并不能很容易地與人們普遍期望的相匹配。最值得注意的是,我們對(duì)邊緣的名稱不感興趣。更糟糕的是,圖論也發(fā)生了一些變化,引入了步行,注意到傳統(tǒng)上,一條路是指現(xiàn)在通常被稱為開放步行的一條路?,F(xiàn)在,在沒有任何限定條件的情況下,路徑通常被理解為簡單,這意味著沒有頂點(diǎn)(因此沒有邊)被重復(fù)。(“鏈”一詞也用于指所有頂點(diǎn)和邊都是不同的游走。)所以我的問題是:如何命名和定義這個(gè)功能?到目前為止,我所做的是界定:path(Rel_2, Path, X0,X)第一個(gè)論點(diǎn)必須是這種關(guān)系的延續(xù)。然后要么是Path或者一對(duì)頂點(diǎn)。示例用法n(a, b).
n(b, c).
n(b, a).
?- path(n,Xs, a,X).
Xs = [a], X = a ;
Xs = [a, b], X = b ;
Xs = [a, b, c], X = c ;
false.實(shí)施:- meta_predicate path(2,?,?,?).
:- meta_predicate path(2,?,?,?,+).
path(R_2, [X0|Ys], X0,X) :-
path(R_2, Ys, X0,X, [X0]).
path(_R_2, [], X,X, _).
path(R_2, [X1|Ys], X0,X, Xs) :-
call(R_2, X0,X1),
non_member(X1, Xs),
path(R_2, Ys, X1,X, [X1|Xs]).
non_member(_E, []).
non_member(E, [X|Xs]) :-
dif(E,X),
non_member(E, Xs).
路徑/小徑/步行的定義
holdtom
2019-07-02 14:30:36