明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 559|回复: 9

Lisp函数已定义的局部变量获取和去重

  [复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式
本帖最后由 fangmin723 于 2025-1-21 08:11 编辑

在编写lisp时,有时候可能很多个函数,有主函数,子函数。

子函数可能引用主函数的变量,主函数也可能引用到子函数的变量,还有子函数和子函数之间的变量引用。


这就涉及到一个问题,在其他函数中引用了此函数的变量,在函数结束时,需要将变量的值清空,那么如果在此函数结束时清空了变量,而后面的函数在执行时又引用了此函数的变量,那么就会出错。

这个问题解决有两种方法,
第一种:是在借用的函数中设置全局变量,这样就不影响将借用变量在被借用的函数中设置为局部变量,
在函数内变量的值变更后,用返回的方式再次赋值给变量,这样就不影响变量的最后清空销毁
第二种:就是将所有互相引用的局部变量全部在主函数中设为局部变量,从而在程序在
最终结束时变量的清空销毁;

但是,在实际运用中,变量可能在一个函数中引用,也可能在多个函数中引用,在这种情况下,就不便使用第一种方法,大部分都是第二种情况,
这就涉及到一个问题,如果相互引用的变量过多,在程序完全执行完后,变量没有设为局部变量而清空销毁,在其他程序也有相同名称变量时,可能会影响其他程序的功能和使用。

所以变量的清空和销毁是有必要的

引用的函数变量过多,那变量整理就变得复杂而头疼,所以就写这个工具获取并去重

  1. ;;Lisp函数已定义的局部变量获取和去重 推荐的文件内容格式
  2. (defun c:主函数命令(/ 主函数局部变量) 主函数逻辑代码 (prin1))
  3. (defun 子函数1(/ 子涵所有局部变量[子函数1独用局部变量、子涵及之间的引用变量]) 子函数1逻辑代码)
  4. (defun 子函数2(/ 子涵所有局部变量[子函数2独用局部变量、子涵及之间的引用变量]) 子函数2逻辑代码)
  5. (defun 子函数3(/ 子涵所有局部变量[子函数3独用局部变量、子涵及之间的引用变量]) 子函数3逻辑代码)
  6. (defun 子函数4(/ 子涵所有局部变量[子函数4独用局部变量、子涵及之间的引用变量]) 子函数4逻辑代码)


  1. ;;我常用的最终代码格式
  2. (defun c:主函数命令(主函数局部变量、子涵及之间的引用变量、所有子函数名)
  3.   (progn;;;子函数
  4.     (defun 子函数1(/ 子函数1独用局部变量) 子函数1逻辑代码)
  5.     (defun 子函数2(/ 子函数2独用局部变量) 子函数2逻辑代码)
  6.     (defun 子函数3(/ 子函数3独用局部变量) 子函数3逻辑代码)
  7.     (defun 子函数4(/ 子函数4独用局部变量) 子函数4逻辑代码)
  8.     .
  9.     .
  10.     .
  11.   )
  12.   主函数逻辑代码
  13.   (prin1)
  14. )






本帖子中包含更多资源

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

x

评分

参与人数 3明经币 +3 收起 理由
baitang36 + 1 很给力!
cghdy + 1 很给力!
zhoupeng220 + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 6 天前 | 显示全部楼层
;;我常用的最终代码格式
(defun c:主函数命令(主函数局部变量、子涵及之间的引用变量、所有子函数名)
  (progn;;;子函数
    (defun 子函数1(/ 子函数1独用局部变量) 子函数1逻辑代码)
    (defun 子函数2(/ 子函数2独用局部变量) 子函数2逻辑代码)
    (defun 子函数3(/ 子函数3独用局部变量) 子函数3逻辑代码)
    (defun 子函数4(/ 子函数4独用局部变量) 子函数4逻辑代码)
    .
    .
    .
  )
  主函数逻辑代码
  (prin1)
)


这种写法很适合优化编译,可以提高运行效率
回复 支持 2 反对 0

使用道具 举报

发表于 7 天前 | 显示全部楼层
vlide可以直接获取的

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
很不错,解决了大问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层

飞诗lisp编辑器也可以获取单个函数的所有局部变量,我这个是将所有函数的局部变量获取到,然后去重,然后放置到主函数的局部变量里,不管函数之间的变量如何相互引用,当功能执行完毕后,在主函数里面一次性清空销毁
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
CAD的vlide也可以
回复 支持 反对

使用道具 举报

 楼主| 发表于 6 天前 | 显示全部楼层

中望没有vlide
回复 支持 反对

使用道具 举报

 楼主| 发表于 6 天前 | 显示全部楼层
本帖最后由 fangmin723 于 2025-1-21 09:49 编辑
baitang36 发表于 2025-1-21 09:36
;;我常用的最终代码格式
(defun c:主函数命令(主函数局部变量、子涵及之间的引用变量、所有子函数名)
  ( ...

是的,子函数在用的得到的时候才加载到,用不到的就不加载,防止占用不必要的内存
回复 支持 反对

使用道具 举报

发表于 4 天前 来自手机 | 显示全部楼层
感谢分享,应该不错的啊
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-27 14:06 , Processed in 0.200977 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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