給定一個列表的列表,我想用B
s中的所有A
替換,其中A
和B
是序言變量。在另一個變量中替換一個變量
例如,如果該名單[[1,2,D,C],[A,D],[4,A],[1,2,A]]
我想要的結果是[[1,2,D,C],[B,D],[4,B],[1,2,B]]
爲此,我寫了下面,來替代所有的A
S IN B
S IN單列表:
/*substitude_single(+OldVar,+NewVar,+OldList,-NewList) */
substitute_single(_,_,[],[]).
substitute_single(A,B,[A|As],[B|Bs]):-
substitute_single(A,B,As,Bs).
substitute_single(A,B,[X|As],[X|Bs]):-
substitute_single(A,B,As,Bs).
substitute(_,_,[],[]).
substitute(A,B,[P|Ps],[Q|Qs]):-
substitute_single(A,B,P,Q),
substitute(A,B,Ps,Qs).
:
現在我的主列表中的每個元素,這是一個列表本身上應用此
例如,當我在substitute_single(A,B,[C,A,D,1],X)
上測試我的代碼時,出現了這個問題,我得到了很多解決方案,有些正在將值應用於變量。例如,我得到:
A = 1,
C = 1,
D = 1,
X = [B, B, B, B] ;
或:
A = D,
C = D,
X = [B, B, B, 1]
,僅在許多其他的解決方案,我得到:
X = [C, B, D, 1]
這是我想要的解決方案。然而,還有更多的解決方案(我不希望這樣)接踵而來。
所以我試圖削減方案,以防止產生更多的解決方案:
substitute_single(A,B,[A|As],[B|Bs]):-
substitute_single(A,B,As,Bs),
!.
但現在,我雖然只得到一個單一的解決方案,這是不是我的目的了!
(對於上面的例子,該解決方案我得到的是
A = 1,
C = 1,
D = 1,
X = [B, B, B, B].
)
我不知道如何或在哪裏我應該改變我的程序,以便它只會給我我想要的解決方案?
(注:A
和B
可能是變量或還常量,例如:substitute_single(A,3,[C,A,D,1],X)
)應該產生[C,3,D,1]
)
我會盡快恩澤可以提供把賞金一個純粹的,單調的解決方案。 – false
......確定 - 對於常見情況。 – false
@repeat,我指'substitute_single/4'的意思是在'B'中替換'A',在單個列表中出現'A'的所有外觀。然後,我將它用於列表的列表,將其應用於每個列表。 – TheEmeritus