【发布时间】:2014-04-22 21:57:55
【问题描述】:
我在 Prolog 中编写代码时遇到问题,该代码接受一个列表,删除所有素数,然后返回列表的其余部分。我写了一个素数检查器谓词prime/1,它工作得很好,但是当我将我的程序应用于列表时,就像我在Prolog中尝试做的几乎所有事情一样,我会根据需要返回没有素数的列表,但顺序相反。
primemover(L, Lcomp):-
primeremover(L, [], Lcomp).
primeremover([], A, A).
primeremover([H | T], A, X):-
\+ prime(H),
primeremover(T, [H | A], X).
primeremover([H | T], A, X):-
prime(H),
primeremover(T, A, X).
我可以通过查看我的代码来了解为什么列表会反转,但我就是找不到解决方法。如果我尝试反转将非素数移动到中间列表的递归案例的头部和尾部,它会工作并以正确的顺序出现,但是每个值都在它自己的嵌套列表中,这比出来更糟糕倒退。
有没有简单的方法来解决这个问题?
【问题讨论】:
-
你上周问了同样的问题stackoverflow.com/questions/22391367/…