Prolog 检查列表是否只包含零

Prolog 检查列表是否只包含零,prolog,Prolog,在我的作业中,有人给了我一个问题,要求我编写一个Prolog程序,该程序将数字列表作为输入,如果列表 仅包含0s 我在如何使程序搜索零方面遇到了问题。例如,以下查询: ?- zero([0,0,0,0]). 应该给我们true,如果其中有非零的数字,则应该返回false。为什么要我们为您做家庭作业? 无论如何,这是非常简单的递归。比如: zero([]). zero([0|T]) :- zero(T). 只需继续剥离零,直到您的列表为空。这并不难;) 通常情况下,人们不会为此定义适当的谓词,

在我的作业中,有人给了我一个问题,要求我编写一个Prolog程序,该程序将数字列表作为输入,如果列表 仅包含
0s

我在如何使程序搜索零方面遇到了问题。例如,以下查询:

?- zero([0,0,0,0]).

应该给我们true,如果其中有非零的数字,则应该返回false。

为什么要我们为您做家庭作业? 无论如何,这是非常简单的递归。比如:

zero([]).
zero([0|T]) :- zero(T).

只需继续剥离零,直到您的列表为空。这并不难;)

通常情况下,人们不会为此定义适当的谓词,而是将其用于以下目的:

..., maplist(=(0), Zs), ...
举一个具体的例子:

?- Zs =[A,B,C], maplist(=(0), Zs).
此查询对应于:

?- Zs = [A,B,C], call(=(0), A), call(=(0), B), call(=(0), C).
或者更简单:

?- Zs = [A,B,C], 0 = A, 0 = B, 0 = C.
如果您想将其定义为一个单独的谓词,请记住为其使用一个好的名称。列表中的每个元素都是一个零,该关系描述了此类零的整个列表。在这种情况下,列表的惯例是使用复数。因此
零/1

zeros([]).
zeros([0|Zs]) :-
   zeros(Zs).