乐筑天下

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

[编程交流] 从lis中删除子列表

[复制链接]

53

主题

302

帖子

249

银币

后起之秀

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

铜币
265
发表于 2022-7-5 23:13:36 | 显示全部楼层 |阅读模式
大家好,
我有一个包含子列表的列表。我想消除测试函数中的子列表。如何消除开括号和封闭括号以及我得到的“nil”形式的结果。
列表:
我得到的结果是:
(((4.0 6.0)(8.0 9.0)(12.0 15.0)))无)
提前感谢
芦荟
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:28:22 | 显示全部楼层
您是否希望删除任何包含冗余项的子列表?
  1. (defun Eliminate( triangList )
  2. (foreach subList triangList
  3. (if (or (equal (car  subList) (cadr  subList) 0.1)
  4.          (equal (car  subList) (caddr subList) 0.1)
  5.          (equal (cadr subList) (caddr subList) 0.1))
  6.   (setq triangList (vl-remove subList triangList))
  7. )
  8. )
  9. triangList
  10. )

 
 
请注意,MAPCAR将用评估结果替换列表项。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:35:01 | 显示全部楼层
MAPCAR方法:
  1. (defun Eliminate( triangList / )
  2. (vl-remove nil (mapcar '(lambda (a)
  3.                          (if (or (equal (car  a) (cadr  a) 0.1)
  4.                                  (equal (car  a) (caddr a) 0.1)
  5.                                  (equal (cadr a) (caddr a) 0.1))
  6.                           nil
  7.                           a
  8.                          )
  9.                         )
  10.                        triangList)
  11. )
  12. )
回复

使用道具 举报

53

主题

302

帖子

249

银币

后起之秀

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

铜币
265
发表于 2022-7-5 23:37:21 | 显示全部楼层
确切地这两个函数在给定的列表上都可以很好地工作;稍后我将在一个更长的列表上进行测试,可能多达500个。
谢谢Mircea
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:50:06 | 显示全部楼层
不客气,艾莉!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:58:10 | 显示全部楼层
任意长度子列表的另一种递归方法:
 
  1. (defun foo ( l )
  2.    (cond
  3.        (   (null l) nil)
  4.        (   (bar (car l)) (foo (cdr l)))
  5.        (   (cons (car l) (foo (cdr l))))
  6.    )
  7. )
  8. (defun bar ( x )
  9.    (cond
  10.        (   (null x) nil)
  11.        (   (vl-some '(lambda ( y ) (equal (car x) y 0.1)) (cdr x)))
  12.        (   (bar (cdr x)))
  13.    )
  14. )
  1. _$ (foo '(((3.0 2.0) (3.0 2.0) (4.0 5.0)) ((4.0 6.0) (8.0 9.0) (12.0 15.0))))
  2. (((4.0 6.0) (8.0 9.0) (12.0 15.0)))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:59:43 | 显示全部楼层
和另一个迭代版本:
  1. (defun foo ( l )
  2.    (vl-remove-if
  3.       '(lambda ( x )
  4.            (while (and (cdr x) (not (vl-some '(lambda ( y ) (equal (car x) y 0.1)) (cdr x))))
  5.                (setq x (cdr x))
  6.            )
  7.            (cdr x)
  8.        )
  9.        l
  10.    )
  11. )
  1. _$ (foo '(((3.0 2.0) (4.0 5.0) (8.0 9.0) (3.0 2.0)) ((4.0 6.0) (8.0 9.0) (12.0 15.0))))
  2. (((4.0 6.0) (8.0 9.0) (12.0 15.0)))
回复

使用道具 举报

53

主题

302

帖子

249

银币

后起之秀

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

铜币
265
发表于 2022-7-6 00:13:09 | 显示全部楼层
尊敬的李:,
两者都很好。感谢我不知道如何有效使用的技巧。
当做
芦荟
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:18:45 | 显示全部楼层
不客气,阿洛伊
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:28 , Processed in 0.370047 second(s), 70 queries .

© 2020-2025 乐筑天下

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