Prolog列表中的空列表

时间:2016-12-05 01:58:26

标签: prolog

我正在学习Prolog,并且课程中的练习表示要清除列表中的每个原子元素,这可能是重叠列表。 如果我有

clean([1,[2,[3],4],5],L).

它应该成为

L = [[[]]]

怎么做?

1 个答案:

答案 0 :(得分:0)

解决此问题的方法是仔细考虑您可能遇到的列表的每个案例。例如,如果遇到空列表,那么答案是什么?答案就是空列表。

clean([],[]).

现在,如果第一个元素是一个原子(不是另一个列表)怎么办?然后我们删除元素 - 这意味着我们不会将其添加到结果列表中。

clean([H|T],L):- \+ is_list(H), clean(T,L).

最后,如果第一个元素是另一个列表怎么办?然后我们将列表添加到答案中,但仅在清除之后。将其添加到答案列表的方式是"预先挂起"它作为答案列表的头部,所以" [空| L]"。

clean([H|T],[Empty|L]):- is_list(H), clean(H,Empty), clean(T,L).

将上述条款放在一个程序中,这就是你的答案。