乐筑天下

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

[编程交流] 在autolisp中操作列表

[复制链接]

14

主题

23

帖子

9

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 08:42:09 | 显示全部楼层 |阅读模式
嗨,刚刚加入cadtutor。它已经帮了我很多。谢谢大家。
 
我是Lisp的初学者,我想操作列表。
 
((1.y)(2.b)(3.d)(4.f)),这是一个列表。
 
我希望这个是(1.b),(2.y)这样。
2.我希望它是(1 2 3 4)(y b d f)
 
我知道你们都是专家,这篇文章会让你们都很沮丧,但从最近两天开始,我一直在尝试这样做,不知道我应该使用哪个功能。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 08:58:18 | 显示全部楼层
那是(1.y)还是(1.y)?
 
随便。。如果是的话
  1. (defun splt (lst / num alp)
  2. (foreach itm (reverse lst)
  3.    (setq num (cons (car itm) num)
  4.   alp (cons (cdr itm) alp)
  5.    )
  6. )
  7. (list num alp)
  8. )
  1. (defun splt (lst / a b num alp)
  2. (setq lst (reverse lst))
  3. (while (setq a (car lst))
  4.    (setq b   (cdr lst)
  5.   num (cons (car a) num)
  6.   alp (cons (cdr a) alp)
  7.    )
  8.    (setq lst b)
  9. )
  10. (list num alp)
  11. )
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 09:10:23 | 显示全部楼层
对于#2,您可以使用(mapcar)
 
  1. [b][color=BLACK]([/color][/b]setq lst '[b][color=FUCHSIA]([/color][/b][b][color=NAVY]([/color][/b]1 . y[b][color=NAVY])[/color][/b][b][color=NAVY]([/color][/b]2 . b[b][color=NAVY])[/color][/b][b][color=NAVY]([/color][/b]3 . d[b][color=NAVY])[/color][/b][b][color=NAVY]([/color][/b]4 . f[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]
  2. [b][color=BLACK]([/color][/b]setq l1 [b][color=FUCHSIA]([/color][/b]mapcar 'car lst[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]
  3. [b][color=BLACK]([/color][/b]setq l2 [b][color=FUCHSIA]([/color][/b]mapcar 'cdr lst[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
 
有很多方法可以做到这一点。祝你好运-大卫
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:17:56 | 显示全部楼层
我的版本,它并不比大卫的代码远。。
 
  1. (setq lst '((1 . y) (2 . b) (3 . d) (4 . f)))
  2. (mapcar (function (lambda (x)
  3.                    (setq x1 (cons (car x) x1))
  4.                    (setq x2 (cons (cdr x) x2))
  5.                  )
  6.        )
  7.        lst
  8. )
  9. (reverse x1)
  10. (reverse x2)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:29:19 | 显示全部楼层
另一个:
 
  1. (setq lst '((1 . y) (2 . b) (3 . d) (4 . f)))
  2. (apply 'mapcar (cons 'list (mapcar '(lambda ( x ) (list (car x) (cdr x))) lst)))
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:35:57 | 显示全部楼层
另一个
 
  1. (setq lst '((1 . y) (2 . b) (3 . d) (4 . f)))
  2. (defun Picks (lst / i j)
  3. (foreach x (reverse lst)
  4.    (setq i (cons (car x) i))
  5.    (setq j (cons (cdr x) j))
  6. )
  7. (princ i)
  8. (princ j)
  9. (princ)
  10. )
  1. (Picks lst)
回复

使用道具 举报

14

主题

23

帖子

9

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 09:46:52 | 显示全部楼层
Thnx Tharwat,David和PBE。。。我有两个函数,mapcar和lambda。。。我得到了我的答案。
 
再次感谢各位。来自印度的感谢。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 09:06 , Processed in 0.407468 second(s), 77 queries .

© 2020-2025 乐筑天下

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