fangmin723 发表于 6 天前

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

本帖最后由 fangmin723 于 2025-1-21 08:11 编辑

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

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

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

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

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

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

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

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


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






baitang36 发表于 5 天前

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


这种写法很适合优化编译,可以提高运行效率

自贡黄明儒 发表于 6 天前

vlide可以直接获取的

gdfyhao 发表于 6 天前

很不错,解决了大问题

fangmin723 发表于 6 天前

自贡黄明儒 发表于 2025-1-20 11:45
vlide可以直接获取的
飞诗lisp编辑器也可以获取单个函数的所有局部变量,我这个是将所有函数的局部变量获取到,然后去重,然后放置到主函数的局部变量里,不管函数之间的变量如何相互引用,当功能执行完毕后,在主函数里面一次性清空销毁

hubeiwdlue 发表于 6 天前

这个牛逼。

kozmosovia 发表于 6 天前

CAD的vlide也可以

fangmin723 发表于 5 天前

kozmosovia 发表于 2025-1-20 20:36
CAD的vlide也可以

中望没有vlide

fangmin723 发表于 5 天前

本帖最后由 fangmin723 于 2025-1-21 09:49 编辑

baitang36 发表于 2025-1-21 09:36
;;我常用的最终代码格式
(defun c:主函数命令(主函数局部变量、子涵及之间的引用变量、所有子函数名)
( ...
是的,子函数在用的得到的时候才加载到,用不到的就不加载,防止占用不必要的内存

muai2010 发表于 3 天前

感谢分享,应该不错的啊
页: [1]
查看完整版本: Lisp函数已定义的局部变量获取和去重