找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: Lispboy

[选择集] 通用堆栈数据结构---入栈函数

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-6-7 19:29:48 | 显示全部楼层
wowan1314 发表于 2013-6-7 19:21
我的“树”是分叉的。 这个数据结构是笔直的,这是“棍”不是“树”。

我这是给你举的一个枝的例子,告诉你每层的时候你都能临时保存交点等数据,供以后回来的时候用。

具体些你那个程序时候,只要遇到分叉的地方,你就PUSH, 回来的时候就POP。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-6-7 19:29:57 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2013-6-7 19:34 编辑

不管怎麽说处理就是assoc + subst ,直说这个LIST的作用比解释成堆栈更容易让广大ALISPER接受

点评

自己是开发者,开发的是黑匣子,给使用的人接口。栈是解释那种保存后进先出数据的名而已,说的是那个思想,LISPER也应该读读编程思想,数据组织方面的资料。我这几个子函数没读过数据结构的朋友自己摸索过程,也能写  详情 回复 发表于 2013-6-7 19:41
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-6-7 19:34:42 | 显示全部楼层
wowan1314 发表于 2013-6-7 19:28
1、 (SETQ LST '(1))
     2、(setq lst (cons 2 lst))
         3、(setq lst (cons 3 lst))

像我的代码里面对一个关联表的处理方式了,你这么写完不就和我一样了吗,你每个程序的时候都要写这些代码吗?

我封装的那个函数,可以需要的时候任意建,不同名字区分而已。你换个地方的时候在用一次LST2写好几次吗?以后你修改程序的时候,麻烦不,代码好懂不?写了几层后,回来你都要仔细考虑哪个地方LST3,哪个地方LST2了。

把所有的全局变量组织一个表里面。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-6-7 19:41:16 | 显示全部楼层
st788796 发表于 2013-6-7 19:29
不管怎麽说处理就是assoc + subst ,直说这个LIST的作用比解释成堆栈更容易让广大ALISPER接受

自己是开发者,开发的是黑匣子,给使用的人接口。栈是解释那种保存后进先出数据的名而已,说的是那个思想,LISPER也应该读读编程思想,数据组织方面的资料。我这几个子函数没读过数据结构的朋友自己摸索过程,也能写出来,但是如果有点数据结构的知识,这种问题一遇到,马上就想到要堆栈的数据结构,然后堆栈的数据结构的各种实现算法都是现成的,直接用LISP就描写出来了。

有的人写程序没函数,后来人不是建议要他重复的地方写成函数吗? 函数就是封装。让代码维护容易,效率反而不如直接都写到一起。代码维护的代价和程序提高的那点效率比,前者重要多了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2013-6-7 19:49:31 | 显示全部楼层
本帖最后由 marting 于 2013-6-7 19:50 编辑

呵呵,学习了。不知道别人怎么理解,我是明白了。

我保存数据的时候就用 (XD::STACK:PUSH "我宝贝1” data1)...(XD::STACK:PUSH "我宝贝N” data2)
恢复的时候就 (setq 宝贝N (XD::STACK:POP))....(setq 宝贝1 (XD::STACK:POP))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-6-7 20:46:59 | 显示全部楼层
我的理解,LZ 是想用堆栈的概念组织一个数据(表),堆也好、栈也好,全局变量也好,都没有错,对Alispe而言说这是一个全局变量,表数据的组织形式如 ((index1 alist1) (index2 alist2) ....),而且是按规则使用,这样更好理解,当然学些数据组织对编程肯定是有帮助和提高的。你用数据组织的概念理解它就是堆栈,你用Lisp的概念理解成全局变量也没错,关键是用好。

附几个以前的帖子

1 用 Ldata ,这个存储的是字串组合,修改的时候分解再组合,这个也是参考了某些专业软件的数据记录方式,它们的记录方式应该和LZ 一样,((index1 (...)) (index2 (...)) ...),比较后没有采用这种方式,当然那时也没有堆栈的概念,不管用哪个,都要代码维护这个数据(表)的。
http://bbs.xdcad.net/forum.php?mod=redirect&goto=findpost&ptid=658127&pid=3383790
2 这是另外一个例子Ea:Begin Ea:End(纪念一下,十周年了),对这个数据的组织也仅是停留在全局变量的理解
http://www.xdcad.net/forum/forum.php?mod=viewthread&tid=57831

当然现在不系统的写程序,也不再使用上面的任何一项,临时写的也不会考虑后面的维护。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2013-6-18 07:36:08 | 显示全部楼层
要慢慢消化, 还不太明白!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-23 20:32 , Processed in 0.209806 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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