明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 687|回复: 6

[讨论] ssdel和ssadd和cons、subst使用区别

[复制链接]
发表于 2024-6-26 11:35:46 | 显示全部楼层 |阅读模式
  1. (ssdel en ss);---修改直接生效,不需要重新定义ss

  2. (ssadd en ss);---修改直接生效,不需要重新定义ss

  3. (cons p pts);---修改不直接生效,需要套一层,重新定义pts
  4. ;---测试一
  5. (defun c:gg1()
  6.   (setq ss(ssget))
  7.   (setq en(ssname ss 0))
  8.   (ssdel en ss)
  9.   (princ(sslength ss))
  10.   (princ)
  11. )
  12. ;---测试二
  13. (defun c:gg2()
  14.   (setq ss(ssget))
  15.   (setq en(ssname ss 0))
  16.   (setq s(ssadd))
  17.   (ssadd en s)
  18.   (princ(sslength s))
  19.   (princ)
  20. )
  21. ;---测试三
  22. (defun c:gg3()
  23.   (setq p '(0 0)pts nil)
  24.   ;(cons p pts)
  25.   (setq pts(cons p pts))
  26.   (princ pts)
  27.   (princ)
  28. )
最近遇到一个问题,就是ssdel和ssadd和cons这三个函数,都是修改数据的,他们的使用规则居然不太一样。为什么呀?另外,还有其他类似函数吗?
subst函数好像也算,他也需要套一层,重新定义一下。是不是表的操作都需要重新定义,其他数据类型就不需要?

点评

干货满满,也是有同样的疑惑  发表于 2024-6-29 21:12
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-6-26 11:48:56 | 显示全部楼层
本帖最后由 tryhi 于 2024-6-26 11:52 编辑

cons跟subst并不是修改数据,它们是有返回值的,lsp基本上靠返回值(楼主知道什么是返回值吗?),能直接修改数据的,似乎就没几个,选择集算一个,vla-GetBoundingBox函数能直接修改第二、第三参数的值,还有set,还有吗?想不起来,再就是保留函数string-elt<-
 楼主| 发表于 2024-6-26 11:52:50 | 显示全部楼层
tryhi 发表于 2024-6-26 11:48
lsp基本上靠返回值,能直接修改数据的,似乎就没几个,选择集算一个,vla-GetBoundingBox函数能直接修改第 ...

嘿嘿,如果都是套一层,倒也习惯了,关键就是每次我用ssdel和ssadd的时候,总是犹豫要不要套一层,犹豫徘徊。
发表于 2024-6-26 14:13:40 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2024-6-26 15:31 编辑

因为你不知道什么是数据结构,什么是lisp的数据结构...
cons的底层大概率是一个链表+游离指针实现的(堆也可以,不过按照lisp的尿性不是),所以它比Add快,至于为什么不是数组,大概率是因为压根就没想过lisp怎么实现加速.
lisp缺少数据结构,
数组可以实现hashmap,
数组可以排序之后实现二分法,
数组可以实现插入序的hashmap,
数组可以惰性分配,
数组可以SIMD加速读取,
数组还可以实现各种树状结构...

结果lisp只有一个链表,只允许你一个计数访问,没有随机访问...所以你做什么都需要访问前面的节点...






发表于 2024-6-26 14:14:09 | 显示全部楼层
传址与传值的差异。
发表于 2024-6-29 21:11:35 | 显示全部楼层
你有种再说一遍 发表于 2024-6-26 14:13
因为你不知道什么是数据结构,什么是lisp的数据结构...
cons的底层大概率是一个链表+游离指针实现的(堆也可 ...

感谢大佬码字讲解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 14:41 , Processed in 0.147885 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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