在prolog中过滤子列表

时间:2014-10-21 12:09:27

标签: prolog

我想使用谓词来查找满足包含至少一个原子(非变量)的需求的子列表。

contain_atomic([[a,c,e],[a,e,D],[D,A,E]],X).
X = [[a,c,e],[a,e,D]].

到目前为止,我只能将那些元素都是变量的子列表变为空。

all_variable([],[]).
all_variable([A|B],[]):-
    \+atomic(A),
    all_variable(B,[]).

下一步是什么?我接近成功吗?

1 个答案:

答案 0 :(得分:1)

我建议您编写一个谓词,说明单个子列表必须包含在结果中的内容(我将此任务作为您具体案例的简单练习):

your_property(Sublist) :-
    ...

然后,使用include/3过滤所有满足此属性的子列表:

include(your_property, Lists0, Lists)

在过滤列表时,始终(至少)考虑使用include/3exclude/3,因为它们只需要对单个元素的属性进行描述即可简化任务。