Prolog 正在检查列表的所有成员

Prolog 正在检查列表的所有成员,prolog,meta-predicate,Prolog,Meta Predicate,假设我的序言中有以下列表: L=[10,11,2,3,5] 是否有一种方法可以检查列表的所有成员,以确保每个成员少于5?我们可以在这里使用。这是一个谓词: 地图列表(:目标,列表) True如果目标可以成功应用于列表的所有元素。参数被重新排序以获得性能,并使谓词在正常情况下具有确定性 因此,我们可以在这里检查以下元素: all_less_five(L) :- maplist(>(5), L). 这里是每个元素x∈五十、 因此,它将调用>(5,x),或以内联形式5>x。因此,

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

L=[10,11,2,3,5]
是否有一种方法可以检查列表的所有成员,以确保每个成员少于
5

我们可以在这里使用。这是一个谓词:

地图列表(:目标,列表)

True
如果
目标
可以成功应用于
列表的所有元素
。参数被重新排序以获得性能,并使谓词在正常情况下具有确定性

因此,我们可以在这里检查以下元素:

all_less_five(L) :-
    maplist(>(5), L).
这里是每个元素x∈五十、 因此,它将调用
>(5,x)
,或以内联形式
5>x
。因此,如果所有这些元素都小于5,则
all_-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.

下面是另一个不使用任何内置功能的解决方案:

all_less_five([]).
all_less_five([X|L]):-
        X < 5,
        all_less_five(L).
现在,它应该很容易实现任何给定的X。试试看

?- all_less_five([10,11,2]).
false.
?- all_less_five([2,3,6,5]).
false.
?- all_less_five([1,2,3,4]).
true.