明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 699|回复: 7

[函数] 自定义函数 改进vl-position函数对重复元素的首位置判断为全位置判断

[复制链接]
发表于 2022-7-22 09:46 | 显示全部楼层 |阅读模式
本帖最后由 guosheyang 于 2022-7-24 09:44 编辑

     给朋友们分享个自定义函数,列出重复元素在列表中的所有位置(对vl-position函数的适当改进),请大家测试并优化下,谢谢!

;自定义函数名称 ygs-vl-position 作者ygs-羊羊羊
;列出表L中某个重复要素en的所有位置列表,改进vl-position函数对重复元素的首位置判断为全位置判断
;参数:L 含有重复元素的列表,en 列表中的某元素项(可能为重复元素)                           
;返回值:位置数字或位置的列表(重复元素en则返回位置数字列表,若en不是L的成员,则返回nil)                                
;测试 (setq l'( 2 5 6.6 5 8.982 7 2.3 7 3.4 6 8.982 5 6 1.6 9 3.4 2 3 7 8.5 8.982 9))                        
;    (ygs-vl-position (setq en 9) L)                                                         

(defun ygs-vl-position(L en / CS PDZ WZB ZCS)
(setq zcs 0)
(while(setq pdz(vl-position en L))
  (setq wzb(cons(+ zcs pdz)wzb))
  (repeat(setq cs(1+ pdz))
         (setq l(cdr l))
  )
  (setq zcs(+ cs zcs))
)
(reverse wzb)
)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-7-22 10:15 | 显示全部楼层
本帖最后由 llsheng_73 于 2022-7-22 11:04 编辑



基于vl-position的扩展-任意元素在表中所有出现位置、表中各元素所有出现位置
http://bbs.mjtd.com/forum.php?mo ... &fromuid=202795


  1. (defun mposition(lst ens / n);;;列出ens表内各个元素的lst中所有出现位置
  2.   (setq n(length lst))
  3.   (mapcar(function(lambda(x / i l l1)
  4.         (setq l lst)
  5.         (while(setq i(vl-position x l))
  6.           (setq l1(cons(+ i n(-(length l)))l1)
  7.           l(nthcdr(1+ i)l)))
  8.         (reverse l1)))ens))


(mposition'(2 5 6.6 5 8.982 7 2.3 7 3.4 6 8.982 5 6 1.6 9 3.4 2 3 7 8.5 8.982 9)'(2 7))
((0 16) (5 7 18))

回复 支持 1 反对 0

使用道具 举报

发表于 2022-7-22 10:09 | 显示全部楼层
(defun ygs-dup-en-pos (en L / WZB ZCS)
  (setq zcs 0)
  (mapcar '(lambda (x)
             (setq zcs (1+ zcs))
             (if (= x en)
               (setq wzb (cons zcs wzb))
             )
           )
          l
  )
  (reverse wzb)
)
 楼主| 发表于 2022-7-22 10:24 | 显示全部楼层
菜卷鱼 发表于 2022-7-22 10:09
(defun ygs-dup-en-pos (en L / WZB ZCS)
  (setq zcs 0)
  (mapcar '(lambda (x)

谢谢你的优化  看起来清爽多了!
 楼主| 发表于 2022-7-22 10:25 | 显示全部楼层
llsheng_73 发表于 2022-7-22 10:15
可以考虑使用隐藏函数nthcdr来提升效率

好的  谢谢!
 楼主| 发表于 2022-7-22 11:17 | 显示全部楼层
llsheng_73 发表于 2022-7-22 10:15
基于vl-position的扩展-任意元素在表中所有出现位置、表中各元素所有出现位置
http://bbs.mjtd.com/fo ...

这个nthcdr 会提高效率   但不是所有电脑的CAD都有   自己用可以  在通用性上还是差一些
发表于 2022-7-22 11:24 | 显示全部楼层
guosheyang 发表于 2022-7-22 11:17
这个nthcdr 会提高效率   但不是所有电脑的CAD都有   自己用可以  在通用性上还是差一些

很多隐藏函数效率相当高,多加载一个fas是值得的
 楼主| 发表于 2022-9-12 13:56 | 显示全部楼层
菜卷鱼 发表于 2022-7-22 10:09
(defun ygs-dup-en-pos (en L / WZB ZCS)
  (setq zcs 0)
  (mapcar '(lambda (x)

(setq zcs -1) 好像这样才对头
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-28 00:22 , Processed in 0.150406 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表