List 在Prolog中拆分列表
我试图创建一个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
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。修改答案以使用您的建议。