乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 28|回复: 11

[编程交流] 从列表中删除项目

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:42:59 | 显示全部楼层 |阅读模式
我只是想知道是否有比我目前拥有的更好的方法:
 
  1. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] remove_items  [b][color=RED]([/color][/b]lst items[b][color=RED])[/color][/b]
  2. [b][color=RED]([/color][/b][b][color=BLUE]vl-remove-if[/color][/b]
  3.    [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]j[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]member[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vl-position[/color][/b] j lst[b][color=RED])[/color][/b] items[b][color=RED])[/color][/b][b][color=RED])[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 14:52:30 | 显示全部楼层
李,
 
下面是一种非常古老且相当缓慢的从列表中删除原子的方法:
  1. [b][color=BLACK]([/color][/b]defun delatom [b][color=FUCHSIA]([/color][/b]a l / tmp[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]while l
  3.     [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]equal a [b][color=BLUE]([/color][/b]car l[b][color=BLUE])[/color][/b] 1e-11[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  4.         [b][color=MAROON]([/color][/b]setq tmp [b][color=GREEN]([/color][/b]cons [b][color=BLUE]([/color][/b]car l[b][color=BLUE])[/color][/b] tmp[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  5.     [b][color=NAVY]([/color][/b]setq l [b][color=MAROON]([/color][/b]cdr l[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  6. [b][color=FUCHSIA]([/color][/b]reverse tmp[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]
  7. [b][color=BLACK]([/color][/b]setq tl '[b][color=FUCHSIA]([/color][/b][b][color=NAVY]([/color][/b]0 . [color=#2f4f4f]"LINE"[/color][b][color=NAVY])[/color][/b] 234 [color=#2f4f4f]"ABC"[/color] 456.78 sym [b][color=NAVY]([/color][/b]10 0 0 1[b][color=NAVY])[/color][/b] [color=#2f4f4f]"DEF"[/color][b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]
  8. [b][color=BLACK]([/color][/b]prin1 [b][color=FUCHSIA]([/color][/b]delatom [color=#2f4f4f]"ABC"[/color] tl[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]
和时间测试程序:
 
大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:57:19 | 显示全部楼层
谢谢David,
 
我最初想过使用(setq-lst(cdr-lst))方法在列表中乱序,但我发现这只对删除单个项目有用,如果列表中有重复项,它将删除重复项的两个实例,而不是请求的一个实例。
 
PS,我喜欢时间测试程序。。。非常新颖。
回复

使用道具 举报

14

主题

71

帖子

16

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
119
发表于 2022-7-6 14:59:27 | 显示全部楼层
  1. (defun remove-lst-items (lst itemlst / i)
  2. (setq i -1)
  3. (vl-remove-if
  4.    '(lambda (x)
  5.       (member (setq i (1+ i))
  6.        itemlst
  7.       )
  8.     )
  9.    lst
  10. )
  11. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:09:05 | 显示全部楼层
^^漂亮的Taner,很有创意
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 15:15:23 | 显示全部楼层
其他方法:
http://www.theswamp.org/index.php?topic=28100.msg336941#msg336941
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:20:07 | 显示全部楼层
哇!
 
沼泽地的方法似乎比这里先进得多。。。大量递归函数(它们让我头疼)。
回复

使用道具 举报

2

主题

182

帖子

180

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 15:22:49 | 显示全部楼层
不,不要让它受伤。递归是最简单的循环。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:31:51 | 显示全部楼层
我只是发现当使用递归过程时,很难计算出函数在做什么。
回复

使用道具 举报

2

主题

182

帖子

180

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 15:33:41 | 显示全部楼层
也许一些带有注释的代码会有所启发。
 
通过递归,我们可以通过一个列表进行迭代。例如,我们可以构建一个简单的递归过程来复制列表。
 
阅读评论以更好地理解操作过程中的“流程”。
 
  1. (defun copy-tree (x)
  2. ;; Return an exact copy of a given list.
  3. ;; (nested lists are this procedures speciality.)
  4. ;;
  5. ;; EX: (copy-tree '(1 2 (3 (4 5) 6 (nil)) 7 (()))
  6. ;;  > (1 2 (3 (4 5) 6 (nil)) 7 (())
  7. (if (atom x)                   ; If "x" is only an item, not a list,
  8.    x                            ; return the item...else,
  9.    (cons (copy-tree (car x))    ; build a list, sending the next item
  10.                                 ; back thru itself along with
  11.          (copy-tree (cdr x))    ; the remander of the items,
  12.                                 ; via backtrace.
  13.                                 ;
  14.                                 ; NOTE:
  15.                                 ; last fuction `cons' returns assembled
  16.                                 ; list of items or exact copy of what
  17.                                 ; was passed to this procedure.
  18.          )
  19.    )
  20. )

 
利用上面的内容,我们可以构建一个稍微修改的版本来证明该列表中的数字。
 
  1. 5

 
这有帮助吗?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-5 00:21 , Processed in 0.570498 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表