tigcat 发表于 2022-9-11 17:19:37

baitang36 发表于 2022-9-11 16:32
lisp有点歧视汉字,用保留函数计算hash值时,并未把汉字计算在内。因此你改了汉字并不会影响hash值。

日文韩文等非英文会不会呢?搞不好英文以外的都这样。

tigcat 发表于 2022-9-11 17:20:41

自贡黄明儒 发表于 2022-9-11 12:24
我使用bricscad,画出的图是歪的,要(Setvar "angbase" 0)(Setvar "angbase" 0)运行两次,画出来的图才是正 ...

以后用到bricscad了,可以请黄总多讲讲技巧

baitang36 发表于 2022-9-11 17:21:57

tigcat 发表于 2022-9-11 17:19
日文韩文等非英文会不会呢?搞不好英文以外的都这样。

同样的,英文优先

llsheng_73 发表于 2022-9-11 17:49:08

本帖最后由 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的坐标。曾经在低版本下利用这一特点在取点时去除重复坐标,结果在高版本的时候不适用了。
个人的建议是,一方面对于已知的陷阱,认真理解,实在不行先记住它,避免踩雷;
另一方面是任何成品发布前需要测试:局部测试、整体测试、海量测试、换版本测试,当然测试简单,麻烦的是准备测试数据,这一点可能比实现功能本身更高麻烦。

tigcat 发表于 2022-9-11 18:01:39

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))))

tigcat 发表于 2022-9-11 18:08:23

llsheng_73 发表于 2022-9-11 17:49
这一篇把lisp的陷阱讲得很透彻,认真研读理解后可以避免踩很多不必要的雷。

此外曾碰到过两类陷阱:


遇到过曲线无法计算出长度,当把一个端点的坐标移到原点时就可以了.就是龙总说的大坐标的问题。

hhh454 发表于 2022-9-11 20:06:31

第一个入坑几次,我是做取点函数p1为原始点,p2关联指向p1,p3又关联指向p2,后来测试代码时发现了改动p1其他两个点都改变了,解决办法是用setq时,当有需要要保留变量值时就多加一个变量,变量多了些,但是不会有冲突,大师讲的很好,学习了

liuhe 发表于 2022-9-11 20:41:54

66666666666666666多学习

magicheno 发表于 2022-9-11 21:55:02

感谢大佬,学习了~

lzx838 发表于 2022-9-11 23:42:21

向高兄学习
页: 1 [2] 3 4 5
查看完整版本: LISP陷阱与缺陷