明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 475|回复: 5

[基础] 他们说NTH碰到大表很慢,又不想激活内部函数的话,读大神的作品重新写个自己的?

[复制链接]
发表于 2024-12-30 16:10:05 | 显示全部楼层 |阅读模式
本帖最后由 llsheng_73 于 2024-12-30 17:05 编辑

  1. (defun myNth(i l);;取表l的第i(>=0)项
  2.   ((cadr(assoc i(list(list 0 car)(list 1 cadr)(list 2 caddr)(list 3 cadddr))))(if(> i 4)(while(> i 4)(setq i(- i 4)l(cddddr l)))l)))

  3. (defun myNth+N(i n l / funs lst);;第i(>=0)项及后续n个,返回的表长是(1+ n)
  4.   (setq funs(list(list 0 car cdr)(list 1 cadr cddr)(list 2 caddr cdddr)(list 3 cadddr cddddr)))
  5.   (while(> i 4)(setq i(- i 4)l(cddddr l)))
  6.   (setq lst(list((cadr(assoc i funs))l))l((caddr(assoc i funs))l))
  7.   (while(> n 4)(setq n(- n 4))(vl-every(function(lambda(x y)(setq lst(cons((cadr x)l)lst))))funs l)(setq l(cddddr l)))
  8.   (while(and(<(length lst)n)l)(setq lst(cons(car l)lst)l(cdr l)))
  9.   (reverse lst))

"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2024-12-30 16:36:33 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2024-12-30 17:13 编辑

调用vba的数组就好了啊,列表索引比数组慢.
http://bbs.mjtd.com/forum.php?mo ... hlight=%B0%D9%CD%F2

和尚去敲C#了,嘻嘻
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-30 17:23:28 | 显示全部楼层
你有种再说一遍 发表于 2024-12-30 16:36
调用vba的数组就好了啊,列表索引比数组慢

那需要一开始就通过VLISP的手段去调用vba方法,访问对象属性等,基本上得把ALISP完全丢掉才行得通,不然很多情况下如果只是为了数据访问把一个大表转成vba数组不一定有这个必要
数组因数存储是连续的,所以在访问速度上具备先天优势,但某些情况下也因为它的连续性导致操作上的不便,比如从一个大数组中去掉几个数据...
总之关于lisp和vba两个东西应该是各有所长各有所短,没有哪个比哪个更好,主要还得看自己喜欢并擅长哪个
回复 支持 反对

使用道具 举报

发表于 2024-12-30 17:42:01 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2024-12-30 17:59 编辑
llsheng_73 发表于 2024-12-30 17:23
那需要一开始就通过VLISP的手段去调用vba方法,访问对象属性等,基本上得把ALISP完全丢掉才行得通,不然 ...

既然你要数据多又要快,就转,全部转...

要是你敲过C#就知道其实链表用途不广,大部分都是数组,
移除某几个元素这样的操作虽然会导致后面往前面移动,但是会调用SIMD指令会帮助你移动.
且不说还可以数组套数组,减少移除的触发.

链表更多的作用是存盘上面动态指向,
因为锁节点方便,但是这和搜索有什么关系呢?
刻意降低你的程序速度用...

像JS/Python语言默认还是有序map,才是脚本语言的重点结构.
它用数组+字典组合,既有O(1)搜索速度,又有插入顺序.
像Lisp直接用链表的真的没几个...
回复 支持 反对

使用道具 举报

发表于 2024-12-30 19:15:04 | 显示全部楼层
谁没事用lisp处理上百万元素的列表数据?大部分的列表数据估计长度1000以下。本质上是没有提速的意义的,整半天提速1微秒,有个啥价值?
回复 支持 反对

使用道具 举报

发表于 2024-12-31 13:46:11 | 显示全部楼层
LISP干大数据还是很快的,必要是搭配数据库,用户只管使用
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-22 19:13 , Processed in 0.189673 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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