如何用累加器法在Prolog中移除列表中的偶数元素?
用累加器法实现Prolog列表移除偶数元素
我想找个相对优雅的方式写Prolog程序,实现移除列表里的偶数元素,打算用累加器法:从空列表开始,逐步剔除偶数元素来构建目标列表。这个思路是受下面的列表反转程序启发的:
accRev([],A,A). accRev([H|T],A,R) :- accRev(T,[H|A],R).
我最初写的程序是这样的:
without_even([],A,A). without_even([H|T],A,N) :- H mod 2 =\= 0, without_even(T,[H|A],N).
我传入空列表作为累加器A,本来期望得到剔除所有偶数后的列表N,但测试?- without_even([1,2],[],N).的时候返回了false。我刚学Prolog两天,直觉告诉我得加一个处理头部元素是偶数的子句。
编辑:
我已经写出能实现功能的程序了:
without_even([],A,A). without_even([H|T],A,N) :- H mod 2 =\= 0, without_even(T,[H|A],N). without_even([H|T],A,N) :- H mod 2 =:= 0, without_even(T,A,N).
内容的提问来源于stack exchange,提问作者Dan Öz
相关产品推荐
相关产品推荐

