我正在学习Prolog,并且课程中的练习表示要清除列表中的每个原子元素,这可能是重叠列表。 如果我有
clean([1,[2,[3],4],5],L).
它应该成为
L = [[[]]]
怎么做?
答案 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).
将上述条款放在一个程序中,这就是你的答案。