函数返回false - Swi-Prolog

时间:2016-11-10 18:12:37

标签: prolog

我目前正在为我的编程课程开发我的proyect。工作是解决Skyline问题。城市的天际线是从远处观看时该城市所有建筑物形成的轮廓的外轮廓。所以,基本上,你会得到一个建筑物清单,每个建筑物有3个参数(初始位置,最终位置,高度),你必须返回天际线的坐标。

我有两个基本案例。列表为空时使用第一个。第二个是如果只有一个建筑物,而当我在列表中有两个或更多建筑物时使用最后一个建筑物。 功能'划分'收到建筑物清单并返回两个建筑物清单。

我的问题是:

divide([],[],[]).
divide([C|[]],[C|ed(X1,X2,H1)]):-
   divide([],ed(X1,X2,H1),[]).
divide([ed(X1,X2,H1),ed(Y1,Y2,H2)|L],L1,L2):-
   L1 = [ed(X1,X2,H1)|L1],
   L2 = [ed(Y1,Y2,H2)|L2],
   divide(L,L1,L2).

当我运行功能'划分'在控制台上,它返回false作为答案而不是返回列表。我无法弄清楚出了什么问题或问题出在哪里。它应该返回两个列表,而不是' false'。

一个例子:

?- divide([(1,2,3),(2,3,4),(1,4,5),(6,2,4)],X,Y).

false.

有什么想法吗? 对不起英语不好,谢谢。

1 个答案:

答案 0 :(得分:3)

始终查看Prolog系统产生的警告。如果你忽视它们,不要对失败感到惊讶。这是另一个错误:

divide([C|[]],[C|ed(X1,X2,H1)]):-
                 ^^^^^^^^^^^^

这不是一份格式良好的名单。