首页 > 解决方案 > 检查列表的所有成员

问题描述

假设我的序言中有以下列表:

L=[10,11,2,3,5]

有没有一种方法可以检查列表的所有成员L以确保每个成员都小于5

标签: prologmeta-predicate

解决方案


我们可以利用maplist/2这里。这是一个谓词:

maplist(:Goal, ?List)

TrueifGoal可以成功应用于List. 对参数进行重新排序以获得性能以及使谓词在正常情况下具有确定性。

所以我们可以在这里检查元素:

all_less_five(L) :-
    maplist(>(5), L).

在这里,对于每个元素x ∈ L,它将因此调用,或以内联形式。因此,如果所有这些元素都小于五个,则谓词将成功。>(5, x)5 > xall_less_five/1

例如:

?- all_less_five([10,11,2,3,5]).
false.

?- all_less_five([2,3,5]).
false.

?- all_less_five([2,3]).
true.

推荐阅读