乐筑天下

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

[编程交流] 列表的部分

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:46:52 | 显示全部楼层 |阅读模式
这可能是一个愚蠢的问题,但我今天还没有完全清醒。
 
如果我有一个清单,比如说
 
  1. (a b c d e f)

 
我想说,
 
  1. (c d e)

 
从中可以看出,如何在不经历大量cad、cadr、cdr、cddr等的情况下实现这一点是最好的方法。
 
我已经研究了nth,但这似乎只检索到一个成员。
 
谢谢
 
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 14:50:53 | 显示全部楼层
取决于你如何陈述问题
 
你想要第三个、第四个和第五个原子吗?
 
你想去掉前两个原子和最后一个原子吗?
 
你只想要c d e吗?
 
-大卫
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 14:55:56 | 显示全部楼层
李,还有一个办法:
 
  1. (mapcar 'read
  2.    (mapcar 'chr
  3.     (vl-string->list
  4.         (substr
  5.             (apply 'strcat
  6.                    (mapcar 'vl-princ-to-string '(a b c d e f))
  7.             ) ;_ end_apply
  8.             3
  9.             3
  10.         ) ;_ end_substr
  11.     ) ;_ end_read
  12.    ) ;_ end_list
  13. ) ;_ end_apply

 
*编辑*
 
结果更新(CDE)为(C D E)
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 14:59:15 | 显示全部楼层
另一个代码:
 
  1. (defun Extract-List-Items(Lst Items / oLst)
  2. (reverse
  3.    (foreach i Items
  4.      (setq oLst(cons(nth i Lst)oLst))
  5.      )
  6.    )
  7. )

 
测试:
 
  1. Command: (Extract-List-Items '(a b c d e f) '(1 2 3))
  2. (B C D)
  3. Command: (Extract-List-Items '(a b c d e f) '(0 5))
  4. (A F)
  5. Command: (Extract-List-Items '(a b c d e f) '(0 1 344))
  6. (A B nil)
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 15:01:22 | 显示全部楼层
还有一点:
 
  1. (defun Extract-List-Items(Lst Items)
  2. (mapcar '(lambda(i)(nth i Lst))Items)
  3. )

 
  1. Command: (Extract-List-Items '(a b c d e f) '(0 4 5))
  2. (A E F)
回复

使用道具 举报

9

主题

383

帖子

82

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
355
发表于 2022-7-6 15:03:15 | 显示全部楼层
  1. (defun GetSubList
  2.              (InList Strt Len /)
  3. (if InList
  4.    (if        (> Strt 0)
  5.      (GetSubList (cdr InList) (1- Strt) Len)
  6.      (if (> Len 0)
  7. (cons (car InList) (GetSubList (cdr InList) 0 (1- Len)))
  8.      )
  9.    )
  10. )
  11. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:08:11 | 显示全部楼层
非常感谢各位的回复,一些非常巧妙的解决方案。
 
我会仔细阅读各种回复,看看哪一个最适合我的编码
 
谢谢大家
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:10:25 | 显示全部楼层
 
 
这里的ASMI编码很棒(和所有其他示例一样)…-喜欢这个简单
 
我想知道为什么LISP从来没有包含一个类似于“substr”的函数用于列表,这样就可以选择列表的一部分。。。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:15:03 | 显示全部楼层
我认为我从来没有遇到过这样的情况,即我知道原子的位置以提取除点值以外的其他值。但这里有一个列表的准substr。请记住,它将(第n个)位置,而不是角色位置。
 
  1. [b][color=BLACK]([/color][/b]defun sublst [b][color=FUCHSIA]([/color][/b]l s n / tmp[b][color=FUCHSIA])[/color][/b]
  2.   [b][color=FUCHSIA]([/color][/b]repeat n [b][color=NAVY]([/color][/b]setq tmp [b][color=MAROON]([/color][/b]cons [b][color=GREEN]([/color][/b]nth s l[b][color=GREEN])[/color][/b] tmp[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  3.             [b][color=NAVY]([/color][/b]setq s [b][color=MAROON]([/color][/b]1+ s[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  4.   [b][color=FUCHSIA]([/color][/b]reverse tmp[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:15:33 | 显示全部楼层
 
非常感谢您的贡献,大卫,非常直观的解决方案。
 
为了回答您为什么需要这样一个函数的问题:当将DCL与我的LISP一起使用时,我有一个主要的变量列表,我将其值添加到popup\u列表中。
 
然而,我有两个这样的popup_列表,填充第二个列表的值取决于用户从第一个列表中所做的选择。
 
因此,当用户选择第一个选项时,我需要获取主列表的一部分来填充第二个弹出列表。。。
 
当然,我本可以为每种选择组合写下新的列表,但这其中的乐趣何在。。。
 
再次感谢,,
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 22:15 , Processed in 0.716125 second(s), 72 queries .

© 2020-2025 乐筑天下

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