2014-09-19 170 views
-2

如何用prolog替換列表中的任何元素?用Prolog替換列表中的元素

例如:

replace(2,[1,2,3,2,1],5,X) 

應該有兩種解決方案:

  • X = [1,5,3,2,1]
  • X = [1,2,3,5,1]
+0

這個問題似乎是無關緊要的,因爲它要求提供完整的代碼解決方案,而不是尋求任何具體嘗試的幫助。 – lurker 2014-09-19 18:23:12

回答

1

您可以通過迭代輸入列表中做到這一點:

%replace(_, [], _, []). 
replace(Element, [Element|Tail], NElement, [NElement|Tail]). 
replace(Element, [CurElement|Tail], NElement, [CurElement|NTail]):- 
    replace(Element, Tail, NElement, NTail). 

樣品輸入:

?- replace(2,[1,2,3,2,1],5,X). 
X = [1, 5, 3, 2, 1] ; 
X = [1, 2, 3, 5, 1] ; 

如果取消對第一條它也將輸出的解決方案,其中輸出列表保持不變。

第一個子句(註釋)是迭代列表的基本情況。它指出,替換的空列表清單本身就是空的。

第二個條款規定,如果列表的頭部與元素一致,則替換列表將包含替換的元素和列表的其餘部分(尾部)。

第三個子句是遞歸步驟,它接收第一個元素並以列表的尾部遞歸調用,並且輸出是與遞歸調用的結果連接的元素。

+0

%?的功能是什麼,它是如何工作的? – fanrenwu 2014-09-19 21:22:16

+0

@fanrenwu:這是Prolog評論標記。該條款已被註釋掉;如果刪除%,則該子句將成爲該過程的一部分,因此它會爲遞歸添加基本情況。 – gusbro 2014-09-22 12:34:23