List 在Prolog中拆分列表

List 在Prolog中拆分列表,list,prolog,List,Prolog,我试图创建一个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). 主要问题:N-1未计算为数值表达式,您需要明确说明所需内容: ... M

我试图创建一个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).

主要问题:
N-1
未计算为数值表达式,您需要明确说明所需内容:

... M is N-1, split(L1, M, L2).
要从列表中获取前N个元素,append/3似乎真的没用。试试看

split([], _, []).
split(_, 0, []).
split([H|L1], N, [H|L2]) :- N > 0, M is N-1, split(L1, M, L2).

主要问题:
N-1
未计算为数值表达式,您需要明确说明所需内容:

... M is N-1, split(L1, M, L2).
要从列表中获取前N个元素,append/3似乎真的没用。试试看

split([], _, []).
split(_, 0, []).
split([H|L1], N, [H|L2]) :- N > 0, M is N-1, split(L1, M, L2).

主要问题:
N-1
未计算为数值表达式,您需要明确说明所需内容:

... M is N-1, split(L1, M, L2).
要从列表中获取前N个元素,append/3似乎真的没用。试试看

split([], _, []).
split(_, 0, []).
split([H|L1], N, [H|L2]) :- N > 0, M is N-1, split(L1, M, L2).

主要问题:
N-1
未计算为数值表达式,您需要明确说明所需内容:

... M is N-1, split(L1, M, L2).
要从列表中获取前N个元素,append/3似乎真的没用。试试看

split([], _, []).
split(_, 0, []).
split([H|L1], N, [H|L2]) :- N > 0, M is N-1, split(L1, M, L2).

你想完成什么?样本输入和期望的结果将是最有用的帮助我们帮助你

如果您试图提取列表的前缀(前N项),最简单的方法是使用Prolog的intriniscs:

split( Xs , N , Pfx ) :-
  length(Pfx,N) ,
  append(Pfx,_,Xs)
  .

你想完成什么?样本输入和期望的结果将是最有用的帮助我们帮助你

如果您试图提取列表的前缀(前N项),最简单的方法是使用Prolog的intriniscs:

split( Xs , N , Pfx ) :-
  length(Pfx,N) ,
  append(Pfx,_,Xs)
  .

你想完成什么?样本输入和期望的结果将是最有用的帮助我们帮助你

如果您试图提取列表的前缀(前N项),最简单的方法是使用Prolog的intriniscs:

split( Xs , N , Pfx ) :-
  length(Pfx,N) ,
  append(Pfx,_,Xs)
  .

你想完成什么?样本输入和期望的结果将是最有用的帮助我们帮助你

如果您试图提取列表的前缀(前N项),最简单的方法是使用Prolog的intriniscs:

split( Xs , N , Pfx ) :-
  length(Pfx,N) ,
  append(Pfx,_,Xs)
  .

@姆布拉奇:修正了。谢谢每个序言都有长度/2,所以最好使用
split(Xs,N,Prefix):-length(Prefix,N),append(Prefix,Xs)。
@jschimp-good call。答案已修改以使用您的建议。@mbrach:已修复该问题。谢谢每个序言都有长度/2,所以最好使用
split(Xs,N,Prefix):-length(Prefix,N),append(Prefix,Xs)。
@jschimp-good call。答案已修改以使用您的建议。@mbrach:已修复该问题。谢谢每个序言都有长度/2,所以最好使用
split(Xs,N,Prefix):-length(Prefix,N),append(Prefix,Xs)。
@jschimp-good call。答案已修改以使用您的建议。@mbrach:已修复该问题。谢谢每个序言都有长度/2,所以最好使用
split(Xs,N,Prefix):-length(Prefix,N),append(Prefix,Xs)。
@jschimp-good call。修改答案以使用您的建议。