我的作业中有一个问题是要求编写一个Prolog程序,该程序将数字列表作为输入,如果列表成功则成功
仅包含?- zero([0,0,0,0]).
。
我在如何使程序搜索零时遇到问题。例如,查询如:
QString str = " lots\t of\nwhitespace\r\n ";
str = str.trimmed();
// str == "lots\t of\nwhitespace"
应该给我们为真,只要其中有一个非零数字,它就应该返回false。
答案 0 :(得分:1)
zero([]).
zero([0|T]) :- zero(T).
在你的清单为空之前,一直保持零的剥离。它不是那么难;)
答案 1 :(得分: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).