我的任务中给出了一个问题,要求编写一个Prolog程序,该程序需要输入一个数字列表并成功,如果列表 仅包含0s
。检查一个列表是否只包含零
我在如何使程序搜索零时遇到了麻烦。例如,像查询:
?- zero([0,0,0,0]).
应该给我们真实的,它应该返回false只要有比它一个非零数字。
我的任务中给出了一个问题,要求编写一个Prolog程序,该程序需要输入一个数字列表并成功,如果列表 仅包含0s
。检查一个列表是否只包含零
我在如何使程序搜索零时遇到了麻烦。例如,像查询:
?- zero([0,0,0,0]).
应该给我们真实的,它应该返回false只要有比它一个非零数字。
通常情况下,人们不会定义此一个适当的谓语,而是使用maplist/2
为宗旨:
..., 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.
如果你想把它定义为一个单独的谓词,记得给它使用一个好名字。列表中的每个元素都是零,并且关系描述了这些零的整个列表。在这种情况下列表的惯例是使用复数词。因此,zeros/1
:
zeros([]).
zeros([0|Zs]) :-
zeros(Zs).
你为什么要求我们为你做作业?无论如何,这是非常简单的递归。例如:
zero([]).
zero([0|T]) :- zero(T).
只是保持剥离零,直到您的列表为空。它是不是很难;)