明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: baitang36

[经验] 【原创】按实现方法给autolisp函数分类

[复制链接]
发表于 2022-2-26 14:33 | 显示全部楼层
cddr = cdr+cdr

cdr属于200系列的话
这个cddr其实应该也属于200的延伸吧
 楼主| 发表于 2022-2-26 14:44 | 显示全部楼层
masterlong 发表于 2022-2-26 14:33
cddr = cdr+cdr

cdr属于200系列的话

用lisp来延伸
 楼主| 发表于 2022-2-26 15:23 | 显示全部楼层
先睹为快,后读免费。没币的朋友在这里下载

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-1 11:50 | 显示全部楼层
感谢分享好资料!以后使用的时候就知用得上.
发表于 2022-3-2 01:08 | 显示全部楼层

  • ;;Graham扫描法求凸包
  • (defun graham-scan (ptlist / hullpt maxXpt sortPt P Q)
  •   (if (< (length ptlist) 3)            ;3点以下
  •     ptlist                ;是本集合
  •     (progn
  •       (setq maxXpt (assoc (apply 'max (mapcar 'car ptlist)) ptlist))  ;最右边的点
  •       (setq sortPt (sort-by-angle-distance ptlist maxXpt)) ;分类点集
  •       (setq hullPt (list (cadr sortPt) maxXpt))        ;开始的两点      
  •       (foreach &n (cddr sortPt)            ;从第3点开始
  •         (setq hullPt (cons &n HullPt))          ;把Pi加入到凸集
  •         (setq P (cadr hullPt))            i-1
  •         (setq Q (caddr hullPt))            i-2
  •         (while (and q (> (det &n P Q) -1e-6))         ;如果左转
  •           (setq hullPt (cons &n (cddr hullPt)))         ;删除Pi-1点
  •           (setq P (cadr hullPt))          ;得到新的Pi-1点
  •           (setq Q (caddr hullPt))          ;得到新的Pi-2点
  •         )
  •       )
  •       (reverse hullpt)  ;返回凸集
  •     )
  •   )
  • )


把CDDR 改写快点的话,如何改写?

发表于 2022-3-2 08:22 | 显示全部楼层
高手总是有太多的方法
 楼主| 发表于 2022-3-2 08:23 | 显示全部楼层
尘缘一生 发表于 2022-3-2 01:08
  • ;;Graham扫描法求凸包
  • (defun graham-scan (ptlist / hullpt maxXpt sortPt P Q)
  •   (if (<  ...

  • cddr的lisp源码是(defun cddr(x)(cdr (cdr x)))
    cddr的fas码是 14 01 01 01 00 05 00 29 29 16     
    如果cddr直接写成(cdr (cdr x))应该能快一点,因为省去了14 和16指令的执行时间,参数传递的时间也节省了。
    我没测试过,你可以弄个测试程序看看有多大差别。
    回复 支持 1 反对 0

    使用道具 举报

     楼主| 发表于 2022-3-2 08:35 | 显示全部楼层
    masterlong 发表于 2022-2-26 14:33
    cddr = cdr+cdr

    cdr属于200系列的话

    所有的lisp函数层层调用,最终都是调用的200系列函数,这些函数再调用windows系统的api,如果lisp直接调用api那会是最快的。
    发表于 2022-3-2 10:18 | 显示全部楼层
    看了下   repeat  while    foreach    vlax-for  mapcar   等循环函数都是4系列的   请问有无非4系列的循环函数  或者不用这几个如何实现循环呢? 谢谢!
     楼主| 发表于 2022-3-2 17:03 | 显示全部楼层
    guosheyang 发表于 2022-3-2 10:18
    看了下   repeat  while    foreach    vlax-for  mapcar   等循环函数都是4系列的   请问有无非4系列的循 ...

    这几个都是lsp源码加载时用的,fas没有循环函数的
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

    GMT+8, 2024-5-2 08:39 , Processed in 0.801403 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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