我正在努力探索Prolog列表。
这是我的问题:我需要输入一个列表和两个变量,并将列表A中的奇数元素和列表B中的偶数元素存储起来。
我得到了这个,但它没有给出结果我正在寻找
store(X, [], []).
store([X,Y|Z],[X|_],[Y|_]):-store(Z,X,Y).
结果应该是:
where ?- store ([a,b,c,1,2,3], A, B).
A = [b,1,3].
B = [a,c,2].
答案 0 :(得分:1)
从list参数构建其他列表对它进行递归访问,在适当的位置存储元素。看看您是否可以完成此代码段
odd_even([], [], []).
odd_even([N|Ns], [N|Odds], Evens) :-
odd(N),
!, odd_even(Ns, Odds, Evens).
% here another odd_even for evens
odd(N) :-
... % use rem/2 to find the integer remainder of N is 1
编辑:将元素从偶数位置移动到列表中,将奇数处的元素移动到另一个(通常称为拆分) ),访问只是将它们放在另外两个参数上:我们还需要一个终止规则,因为现在我们从列表中考虑两个在一起的参数进行拆分。
split([], [], []).
split([X], [], [X]).
split([X,Y|R], [X|Xs], [Y|Ys]) :-
split(R,Xs,Ys).
有一种情况需要考虑:如果奇数与偶数必须从列表末尾“计算”。 然后我们应该在完成时交换(最终)列表...这将需要在递归访问中再添加2个参数,或者计算num.of.elements以预先决定将它们放在哪里...