You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用累加器法在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:05:37