2015-12-01 141 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). 
相关问题