乐筑天下

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

[编程交流] 将一个列表拆分为“一个”列表

[复制链接]

7

主题

26

帖子

16

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 16:46:48 | 显示全部楼层 |阅读模式
大家好,
我想从列表中的任何成员中拆分一个列表,然后用beginnig元素接收一个列表。
示例:给定列表(1 5 3 6 8 2 10)
所选成员:3
结果:列表(3 6 8 2 10 1 5)
 
谢谢你
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:59:25 | 显示全部楼层
这可能会起作用:
  1. (defun foo ( n Lst )
  2. (append
  3.    (vl-member-if '(lambda (x) (= n x)) Lst)
  4.    (reverse (cdr (vl-member-if '(lambda (x) (= n x)) (reverse Lst))))
  5. )
  6. )

 
  1. _$ (foo 3 '(1 5 3 6 8 2 10))
  2. (3 6 8 2 10 1 5)
  3. _$
回复

使用道具 举报

7

主题

26

帖子

16

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 17:03:46 | 显示全部楼层
谢谢你,Grrr!
它工作完美
 
 
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 17:14:23 | 显示全部楼层
如果列表中的键原子(3)超过1个,会发生什么-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:22:28 | 显示全部楼层
另一个:
  1. (defun foo ( n l )
  2.    (repeat (cond ((vl-position n l)) (0)) (setq l (append (cdr l) (list (car l)))))
  3. )
或:
  1. (defun bar ( n l / r )
  2.    (append
  3.        (vl-member-if '(lambda ( x ) (cond ((= n x)) ((setq r (cons x r)) nil))) l)
  4.        (reverse r)
  5.    )
  6. )
或:
  1. (defun baz ( n l )
  2.    (   (lambda ( foo ) (foo n l nil))
  3.        (lambda ( n l a )
  4.            (cond
  5.                (   (null l) (reverse a))
  6.                (   (= n (car l)) (append l (reverse a)))
  7.                (   (foo n (cdr l) (cons (car l) a)))
  8.            )
  9.        )
  10.    )
  11. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:24:57 | 显示全部楼层
没问题,但我的建议(又懒又快)没有考虑重复的项目,事实上它有缺陷:
  1. _$ (foo 3 '(3 1 5 3 6 8 2 10))
  2. (3 1 5 3 6 8 2 10 3 1 5)

正如David提到的:
 
@李,
我很难理解你的代码(尤其是最后一个-1。这叫做递归lambda吗?2。这到底是怎么工作的?)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:32:19 | 显示全部楼层
 
最后一个示例涉及将一个匿名lambda函数作为参数提供给另一个匿名lambda函数,这样,当对最外层的lambda函数进行求值时,在lambda参数内递归求值的符号成为一个定义的函数-最精细的模糊处理
 
当然,该函数也可以更明确地写成:
这里,参数“acc”是用每个递归调用填充的累加器-这称为尾部递归。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:44:32 | 显示全部楼层
李,谢谢你的解释!
 
我认为AutoLISP中最大的障碍之一是递归。
希望有一天我能更好地理解他们。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:52:00 | 显示全部楼层
另一个:
  1. 8
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 14:09 , Processed in 0.709182 second(s), 70 queries .

© 2020-2025 乐筑天下

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