2015-05-29 104 views
2

我的任务中给出了一个问题,要求编写一个Prolog程序,该程序需要输入一个数字列表并成功,如果列表 仅包含0s检查一个列表是否只包含零

我在如何使程序搜索零时遇到了麻烦。例如,像查询:

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

应该给我们真实的,它应该返回false只要有比它一个非零数字。

回答

1

通常情况下,人们不会定义此一个适当的谓语,而是使用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). 
1

你为什么要求我们为你做作业?无论如何,这是非常简单的递归。例如:

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

只是保持剥离零,直到您的列表为空。它是不是很难;)

相关问题