3
我正在学习Prolog,并且在课程中练习说要擦除列表中的每个原子元素,这可能是一个重叠列表。 如果我有序列列表中的空列表
clean([1,[2,[3],4],5],L).
应该成为
L = [[[]]]
如何能不能做到?
我正在学习Prolog,并且在课程中练习说要擦除列表中的每个原子元素,这可能是一个重叠列表。 如果我有序列列表中的空列表
clean([1,[2,[3],4],5],L).
应该成为
L = [[[]]]
如何能不能做到?
解决这个问题的方法是通过每个你可能遇到的列表来思考。例如,如果您遇到空列表,那么答案是什么?答案只是空的列表。
clean([],[]).
现在,如果第一个元素是一个原子(不是另一个列表)呢?然后我们删除元素 - 这意味着我们不会将它添加到结果列表中。
clean([H|T],L):- \+ is_list(H), clean(T,L).
最后,如果第一个元素是另一个列表呢?然后,我们将清单添加到答案中,但只有在清洁后。将它添加到答案列表的方式是通过“预先挂起”它作为答案列表的头部,因此“[Empty | L]”。
clean([H|T],[Empty|L]):- is_list(H), clean(H,Empty), clean(T,L).
把上面的条款放在一起写在一个程序中,这就是你的答案。