我想只删除给定数组中每个元素的第二个外观,并将结果返回给一个新数组。给定的数组可以有原子元素,但也可以在其中包含像元素一样的列表。
谓词应该像这样调用:delete_second(L1,L2)。
L1 = [1,2,4,1,[1,2,3,[4]],2,1]
L2 = [1,2,4,[1,3,[]],2 ,1]。如何从Prolog中的数组中删除元素的特定外观?
2
A
回答
1
您可能会使用两个累加器列表。在一个蓄能器中,你将拥有只出现一次的物品,而在另一个蓄能器上,你将拥有不止一次出现的物品。 因此,您必须通过输入列表中的所有项目更新这些累加器,并根据需要从输出列表中选择并丢弃项目。
喜欢的东西:
delete_second(In, Out):-
delete_second(In, [], [], _, _, Out).
delete_second([], Once, Twice, Once, Twice, []):- !.
delete_second([X|Tail], Once, Twice, NOnce, NTwice, [Y|Out]):-
delete_second(X, Once, Twice, MOnce, MTwice, Y),
!,
delete_second(Tail, MOnce, MTwice, NOnce, NTwice, Out).
delete_second([X|Tail], Once, Twice, NOnce, NTwice, [X|Out]):-
member(X, Twice),
!,
delete_second(Tail, Once, Twice, NOnce, NTwice, Out).
delete_second([X|Tail], Once, Twice, NOnce, NTwice, Out):-
append(OnceP, [X|OnceT], Once),
append(OnceP, OnceT, MOnce),
!,
delete_second(Tail, MOnce, [X|Twice], NOnce, NTwice, Out).
delete_second([X|Tail], Once, Twice, NOnce, NTwice, [X|Out]):-
!,
delete_second(Tail, [X|Once], Twice, NOnce, NTwice, Out).
+0
谢谢你。你是最伟大的。我希望有一天我能把这份恩惠归还给你。 祝您有愉快的一天。 – Fuzion 2010-11-08 17:07:53
相关问题
- 1. 使用Lisp或PROLOG从列表中删除元素的外观
- 2. 如何从数组中删除特定元素
- 3. 如何从数组中删除特定元素?
- 4. 从数组中的特定元素中删除额外的空间
- 5. 如何从数组中删除元素?
- 6. 如何从数组中删除元素?
- 7. 如何从数组中删除相同元素的元素
- 8. 如何删除数组中的元素
- 9. 如何保留特定元素并删除json数组中的其他元素?
- 10. 从ArrayList中删除特定元素
- 11. Mongoose:如何从多个文档中删除特定的数组元素?
- 12. 如何删除特定元素中的特定字符
- 13. 如何从阵列中删除元素的特定区域
- 14. 如何从python列表中删除特定的元素?
- 15. 如何从JSONArray中删除特定的元素?
- 16. 使用javascript从knockout.js可观察数组中删除元素
- 17. 如何从React中的数组状态中删除元素?
- 18. 如何从循环中的数组中删除元素?
- 19. 如何从golang中的JSON数组中删除元素?
- 20. 如何从Python中的多维数组中删除元素?
- 21. 如何删除数组中的元素,如果它有特定的字符?
- 22. 删除列表中的特定元素
- 23. 如何删除PHP中数组中重复特定值的元素?
- 24. 如何从jquery的特定页面中删除特定的css元素?
- 25. 如何从另一个数组中删除数组元素?
- 26. 从Prolog中的列表中删除前N个元素
- 27. 从mongo数组中删除null元素
- 28. Rails Ransack - 从数组中删除元素
- 29. 从数组(Java)中删除空元素
- 30. 从数组中删除元素(拼接)
如果你想投桃报李,以gusbro,你能接受他的答案。 – Cephalopod 2010-12-13 17:02:30