明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: highflybird

[【高飞鸟】] LISP陷阱与缺陷

    [复制链接]
发表于 2022-9-11 17:19 | 显示全部楼层
baitang36 发表于 2022-9-11 16:32
lisp有点歧视汉字,用保留函数计算hash值时,并未把汉字计算在内。因此你改了汉字并不会影响hash值。

日文韩文等非英文会不会呢?搞不好英文以外的都这样。
发表于 2022-9-11 17:20 | 显示全部楼层
自贡黄明儒 发表于 2022-9-11 12:24
我使用bricscad,画出的图是歪的,要(Setvar "angbase" 0)(Setvar "angbase" 0)运行两次,画出来的图才是正 ...

以后用到bricscad了,可以请黄总多讲讲技巧
发表于 2022-9-11 17:21 | 显示全部楼层
tigcat 发表于 2022-9-11 17:19
日文韩文等非英文会不会呢?搞不好英文以外的都这样。

同样的,英文优先
发表于 2022-9-11 17:49 | 显示全部楼层
本帖最后由 llsheng_73 于 2022-9-11 17:50 编辑

这一篇把lisp的陷阱讲得很透彻,认真研读理解后可以避免踩很多不必要的雷。

此外曾碰到过两类陷阱:
大坐标陷阱:目前发现主要是vlax-curve-系列函数,产生的原因初步估计是因为数值过大,而实现那些功能的函数,多半需要进行乘方计算,而这个计算过程不可避免的可能产生数据溢出,最终返回错误的计算结果,比如数据精度明显不正确,交点个数明显不正确等。我是碰到过多次,于是在调用它们的时候,自己加了个“壳”(先取对象任意一点坐标作为基点,然后把所有点以此为基准改为0,0,然后再调用需要的vlax-curve-来处理,最后把处理结果全部加上基点),虽然比较啰嗦一些,但一般情况下确实能解决问题;
版本陷阱:通常我们认为,lisp函数是不受CAD版本限制的,但同样在vlax-curve-getpointatparam上发现过问题,假设一条多段线e,param为2的点和param为的3点完全重合,在低版本下,如果取param大于2小于3,那么返回nil,但在高版本上它不会返回nil,它会返回param为2的坐标。曾经在低版本下利用这一特点在取点时去除重复坐标,结果在高版本的时候不适用了。
个人的建议是,一方面对于已知的陷阱,认真理解,实在不行先记住它,避免踩雷
另一方面是任何成品发布前需要测试:局部测试、整体测试、海量测试、换版本测试,当然测试简单,麻烦的是准备测试数据,这一点可能比实现功能本身更高麻烦。

评分

参与人数 1明经币 +1 收起 理由
highflybird + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-11 18:01 | 显示全部楼层
highflybird 发表于 2022-9-11 16:27
可以,但不直接,有些不便

的确不方便,得间接得到.
(setq lst2 nil)
(reverse(foreach x (vl-sort-i '(2 6 2 4 5 7 5) '<)(setq lst2(cons (nth x '(2 6 2 4 5 7 5))lst2))))
发表于 2022-9-11 18:08 | 显示全部楼层
llsheng_73 发表于 2022-9-11 17:49
这一篇把lisp的陷阱讲得很透彻,认真研读理解后可以避免踩很多不必要的雷。

此外曾碰到过两类陷阱:

遇到过曲线无法计算出长度,当把一个端点的坐标移到原点时就可以了.就是龙总说的大坐标的问题。
发表于 2022-9-11 20:06 | 显示全部楼层
第一个入坑几次,我是做取点函数p1为原始点,p2关联指向p1,p3又关联指向p2,后来测试代码时发现了改动p1其他两个点都改变了,解决办法是用setq时,当有需要要保留变量值时就多加一个变量,变量多了些,但是不会有冲突,大师讲的很好,学习了
发表于 2022-9-11 20:41 | 显示全部楼层
66666666666666666多学习
发表于 2022-9-11 21:55 | 显示全部楼层
感谢大佬,学习了~
发表于 2022-9-11 23:42 | 显示全部楼层
向高兄学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 10:20 , Processed in 0.563676 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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