list - 删除列表中指定索引处的元素

标签 list indexing prolog element

我需要你的帮助!你能帮我解决这个问题吗:在 Prolog 的指定索引处删除列表中的一个元素。

例如:

    delete(List,Index,NewList).   
    ?-L=[1,5,7,4],delete(L,2,L2),write(L2).
    L2 = [1,7,4]

我不知道该怎么做。

解决了!
   away([G|H],1,H):-!.
   away([G|H],N,[G|L]):- N > 1, Nn is N - 1,!,away(H,Nn,L).
   ?-away([1,2,3,4,5],3,X), write(X). 

最佳答案

使用内置函数 nth0/4 (使用基于 0 的索引)或 nth1/4 (它使用基于 0 的索引)来做到这一点。在您的情况下,由于您使用基于 1 的索引,nth1应该使用:

nth1(Index, List, _, Remainder)

供应IndexList ,由于不需要删除的元素,可以忽略它,那么结果列表将在Remainder .

这是nth1的源代码取自 lists.pl SWI-Prolog 中的库,重写以删除依赖项:
% Case 1: Index not specified
nth1(Index, In, Element, Rest) :-
    var(Index), !,
    generate_nth(1, Index, In, Element, Rest).
% Case 2: Index is specified
nth1(Index, In, Element, Rest) :-
    integer(Index), Index > 0,
    find_nth1(Index, In, Element, Rest).

generate_nth(I, I, [Head|Rest], Head, Rest).
generate_nth(I, IN, [H|List], El, [H|Rest]) :-
    I1 is I+1,
    generate_nth(I1, IN, List, El, Rest).

find_nth1(1, [Head|Rest], Head, Rest) :- !.
find_nth1(N, [Head|Rest0], Elem, [Head|Rest]) :-
    M is N-1,
    find_nth1(M, Rest0, Elem, Rest).

关于list - 删除列表中指定索引处的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16250660/

相关文章:

c# - 如何在对象列表中查找单个项目?

arrays - slice 可以引用不同索引范围中的差异数组/slice ,还是有方便的解决方法?

prolog - 差异列表不完整

unit-testing - GNU Prolog 中的单元测试

c++ - SIGBART 错误 vector<list<myClass>>

python - 聚合具有列表的列作为 pandas 数据框中的值

python - 如何更改列表中元素的位置

C 程序 - 从另一个文件构建索引文件

python - Numpy:arr[...,0,:] 有效。但是如何存储切片命令中包含的数据 (..., 0, :)?

Prolog程序理解