2015-12-01 139 views
0

我有一個遞歸謂詞調用,並將該調用的輸出附加到列表append/3。所以輸出將成爲一個列表清單。我的問題是,有時append/3被調用是這樣的:只有一個元素的「列表」的序言列表

append([[2]], [1,2,3,4], L). 

而且這是[[2], 1,2,3,4]輸出。我想在append/3之前檢查第一個元素是隻有一個元素的列表列表,但到目前爲止我無法創建一個匹配它的模式。

所以我的問題是:我如何檢查是否有列表的列表?

+0

'A'是恰好一個列表IFF'A的列表= [[]]]; A = [[_ | _]]'是真的。如果A = [[_]]'爲真,'A'就是一個元素的列表。 – lurker

+0

@lurker'A = [[_]]'對於具有任意數量元素的列表列表也是如此,例如, '[[[1,2,3,4,5]]]([demo](http://ideone.com/oCnvav))。我不確定OP是否想要匹配這樣的列表。 – dasblinkenlight

+0

@dasblinkenlight啊是的你是對的。而'A = [[_ | _]]'也可以進一步嵌套。 – lurker

回答

1

一個匹配的Prolog 原子是,孔的規則,atom/1

is_list_of_list_with_one_element([[X]]) :- atom(X). 
相關問題