我嘗試寫一些Prolog的代碼,以列表如表:重新組織在序言
[[park, joe], [park, bob], [park, kate], [school, joe], [zoo, amy], [zoo, ted]].
,並組織名單到窗體:
[[park,[joe, bob, kate]], [school,[joe]], [zoo,[amy, ted]]].
它可以是假設每個元素(park = park,zoo = zoo)的所有匹配頭在列表中直接相鄰,因爲我創建列表的代碼按字母順序排序。我似乎無法弄清楚如何做到這一點,並且似乎在每一個轉折處都會出現錯誤:(。下面是我到目前爲止在最後一個狀態下運行的代碼,它沒有錯誤地運行,我將嘗試解釋我是什麼思考。
merge([],[]).
merge([First|Rest], Z) :-
merge(Rest, U),
[Meet1, Person1] = First,
(=(U, []) -> % beginning case from recursion, U is empty
Meet2 = [],
Person2 = [];
[[Meet2|Person2]|_] = U),
(=(Meet1, Meet2) -> % Case of matching heads, combine the tails
print('Match '),
append([First], U, Z);
print('No-match '), % otherwise, not matching
append([First], U, Z)).
所以我試圖做的是利用追加到所有的變化增加U和它與Z.如返回到控制檯,
(=(Meet1, Meet2) ->
append(Person1, Person2, Combpersons),
append([Meet1], [Combpersons], T),
append(T, U, Z);
...no match code here..).
但是我的代碼保持當我嘗試在我放置的第一個代碼塊中嘗試更改或添加像這樣的附加內容時,會提前結束使用false。即使將附加內容([First],U,Z)添加到append([Meet1],U, Z)使我的代碼以假結束,我不明白爲什麼。任何幫助/提示創建解決方案,將不勝感激。
我寫差不多:) – CapelliC 2014-12-04 13:20:26