【发布时间】:2021-10-24 05:52:26
【问题描述】:
我正在使用 Prolog 编程,从任何给定的数字 (F) 开始,将列表的偶数元素相乘;保留那些不是的值,开发了以下内容,实际上程序“编译”没有任何错误,但是在输入值时它只返回“false”,我哪里错了?:
% base case
evenproduct(_,[],[]) :- !.
% recursive case
evenproduct(F,[X|Xs], [Y|Ys]) :-
Y is F*X,
X mod 2 =:= 0,
evenproduct(F, Xs, Ys), !.
谢谢!!
【问题讨论】:
-
当一个值失败时,整个谓词失败,因此递归失败。当条件失败时,您需要另一个递归案例来跳过添加值。还可以考虑重新设计谓词,使守卫位于谓词的开头。
-
由于这是一个过滤列表问题,请使用此 SO 查询查看相关答案
[prolog] filter list is:answer -
很可能这是一个重复的问题,但要搜索的答案太多,无法找到重复的问题。