Prolog 从列表中删除所有N个元素

Prolog 从列表中删除所有N个元素,prolog,Prolog,我想写一个程序,从列表中删除第n个元素,而不删除最后一个元素。我的程序已经运行良好,并给出了正确的结果,但当我要求另一个结果时,prolog出现错误“>/2:参数没有充分实例化”。以下是我目前掌握的代码: delete_elements([],0,[]). delete_elements([],_,[_|_]). delete_elements(L,N,R) :- length(L,LL), LL > N, nth1(N,L,_,RZ), NZ is N +

我想写一个程序,从列表中删除第n个元素,而不删除最后一个元素。我的程序已经运行良好,并给出了正确的结果,但当我要求另一个结果时,prolog出现错误“>/2:参数没有充分实例化”。以下是我目前掌握的代码:

delete_elements([],0,[]).
delete_elements([],_,[_|_]).
delete_elements(L,N,R) :-
    length(L,LL),
    LL > N,
    nth1(N,L,_,RZ),
    NZ is N + 1,
    delete_elements(RZ,NZ,RR),
    R = RR.
delete_elements(L,N,R) :-
    length(L,LL),
    LL =< N,
    delete_elements([],_,R),
    L = R.
delete_元素([],0,[])。
删除元素([],[uu,[[uu |])。
删除元素(L、N、R):-
长度(L,LL),
LL>N,
nth1(N,L,z,RZ),
新西兰是N+1,
删除_元素(RZ、NZ、RR),
R=RR。
删除元素(L、N、R):-
长度(L,LL),
LL=
我认为递归的取消条件有问题。如何解决这个问题


提前谢谢

问题在条款中:

delete_elements(L,N,R) :-
    length(L,LL),
    LL =< N,
    delete_elements([],_,R),
    L = R.
对于您在评论中提出的问题,我的实施方案是:

 delete_elements(L,N,R) :- delete_elements(L,1,N,R).

delete_elements([],_,_,[]).
delete_elements([X],N,N,[X]).
delete_elements([X|Xs],N,N,Rs):- length([X|Xs],Y),Y>1,delete_elements(Xs,1,N,Rs).
delete_elements([X|Xs],P,N,[X|Rs]):- P < N,P1 is  P+1,delete_elements(Xs,P1,N,Rs).
delete_元素(L,N,R):-delete_元素(L,1,N,R)。
删除元素([],[uu,[uu,[])。
删除_元素([X],N,N,[X])。
delete|u元素([X|Xs],N,N,Rs):-length([X|Xs],Y),Y>1,delete|u元素(Xs,1,N,Rs)。
delete|u元素([X|Xs],P,N,[X|Rs]):-P
谢谢!你知道为什么这个程序只对N=2有效吗?如何使程序每N(1,3等等)运行一次?例如,当我要求删除_元素([1,2,3,4,5,6,7,8,9],3,R)时,输出应该是R=[1,2,4,5,7,8,9],因为最后一个元素(9)应该在列表中。编辑了答案,你的答案有很多错误,我认为它不可能运行。。。我给出了我的实现…编辑了没有“;”的答案和“->”现在可以正常工作了。请删除另一个帖子,问重复的问题是不对的…是的,因为两个子句符合相同的输入(这不是错误的答案),我将编辑我的答案。。。
?- delete_elements([1,2,3,4,5,6,7,8,9,1,2,3],3,L).
L = [1, 2, 4, 6, 8, 1, 3] ;
false.
 delete_elements(L,N,R) :- delete_elements(L,1,N,R).

delete_elements([],_,_,[]).
delete_elements([X],N,N,[X]).
delete_elements([X|Xs],N,N,Rs):- length([X|Xs],Y),Y>1,delete_elements(Xs,1,N,Rs).
delete_elements([X|Xs],P,N,[X|Rs]):- P < N,P1 is  P+1,delete_elements(Xs,P1,N,Rs).