2016-12-05 72 views
3

我正在學習Prolog,並且在課程中練習說要擦除列表中的每個原子元素,這可能是一個重疊列表。 如果我有序列列表中的空列表

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

應該成爲

L = [[[]]] 

如何能不能做到?

回答

0

解決這個問題的方法是通過每個你可能遇到的列表來思考。例如,如果您遇到空列表,那麼答案是什麼?答案只是空的列表。

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). 

把上面的條款放在一起寫在一個程序中,這就是你的答案。