我尝试写一些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