我需要編寫一組子列表,其中列出整數列表並返回單個列表,並將所有元素加倍。Prolog:將列表中的每個元素的值加倍並返回單個列表
例如:
?- double([[1,2],[3]], X).
Yes
X = [2,4,6]
我有一組名爲條款是mega_append從列表的列表返回一個列表。
例如:
?- mega_append([[1,2],[3]], X).
Yes
X = [1,2,3]
這裏是我的進步(M_A是短期的mega_append):
double([],[]).
double(List,[H1|T1]) :-
m_a(List,[H2|T2]),
H1 is 2 * H2,
double(T2, T1).
我會盡力解釋我怎麼想它會工作。我將第一個列表弄平並將其分解爲頭部和尾部(H2和T2)。我將第二個列表分爲頭部和尾部(H1和T1)。我檢查以確保H1(雙倍值)等於H2(原始值)的2倍。如果是的話,我檢查清單的其餘部分。最終如果他們都匹配正確,我應該留下兩個空列表,應該匹配第一個條款並返回yes。
只有一個值時才起作用(例如:double([[1]], X)
)。任何人都可以提供任何見解我做錯了什麼?我的邏輯或代碼不正確?
如果mega_append獲取單個列表而不是列表列表,會發生什麼情況?防爆。 ? - mega_append([2,3],X)。 – Zeriab 2010-09-26 23:32:57
它返回false。 – birderic 2010-09-26 23:43:50