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).
把上面的條款放在一起寫在一個程序中,這就是你的答案。