我正在尝试创建一个prolog代码来拆分两个列表,但这不起作用。为什么呢?
append([], List, List).
append([Head|Tail], List, [Head|Rest]) :- append(Tail, List, Rest).
split([],N,[]).
split([H|L1], N, L2):- N \= 0, append(L2, H, X), split(L1, N-1, L2).
答案 0 :(得分:2)
你想要完成什么?在帮助我们帮助您时,样本输入和所需结果将非常有用。
如果你试图提取列表的前缀(前N个项目),最简单的方法是使用Prolog的内在词:
split( Xs , N , Pfx ) :-
length(Pfx,N) ,
append(Pfx,_,Xs)
.
答案 1 :(得分:1)
主要问题:N-1
未被评估为数值表达式,您需要明确说明您想要的内容:
... M is N-1, split(L1, M, L2).
要从列表中获取前N个元素,追加/ 3似乎真的没用。尝试改为
split([], _, []).
split(_, 0, []).
split([H|L1], N, [H|L2]) :- N > 0, M is N-1, split(L1, M, L2).