找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1694|回复: 2

[求助] [求助]:在lisp里有数组吗?什么方法能代替?

[复制链接]
发表于 2002-2-18 10:54:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

已领礼包: 23个

财富等级: 恭喜发财

发表于 2002-2-18 11:39:58 | 显示全部楼层

Re: [求助]:在lisp里有数组吗?什么方法能代替?

最初由 lgw 发布
[B]在lisp里有数组吗?什么方法能代替? [/B]

原先的AutoLISP中确实没有数组,不过也有办法解决,方法当然就是用LISP的强项list啦....

VlsualLISP中开始支持SafeArray了,你也可以用用....

具体这个问题不是三言两语能说明白的,多看看帮助和参考手册吧


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

使用道具 举报

发表于 2002-2-19 08:54:26 | 显示全部楼层
以下摘自《Visual LISP for AutoCAD2000程序设计——从学会到用好》第五章

5.6  在 AutoLISP 中定义和使用多维数组
“表”是 AutoLISP 中最常用的数据库纪录类型,也是它最善于操作的、特有的数据类型。利用“表的生成和处理”有关函数,可以定义通常概念中有多维数组,可利用“表的查询和检索”的有关函数,可对这个表进行方便快速的数据提取。以下的模拟程序参见Tools.LSP:
  (Defun C:DataIO ()
       (PrinC "\n三维数组建立...")
       (SetQ l nil
                x0 (GetInt "\nX 维数: ")
                y0 (GetInt "\nY 维数: ")
                z0 (GetInt "\nZ 维数: ")
                 x 1 y 1 z 1 vlx '() vly '() vlz '()
       )
       (Repeat z0
               (Repeat y0
                        (Repeat x0
                                     (PrinC "\n(") (PrinC z)(PrinC y)(PrinC x)(PrinC ")")
                                    (SetQ vlx (Cons (GetReal " 元素数据: ") vlx)
                                                 x (1+ x)
                                     )
                        )
                        (SetQ vly (Cons (Reverse vlx) vly)
                                     y (1+ y)
                                  vlx '() x 1
                        )
                )
                (SetQ vlz (Cons (Reverse vly) vlz)
                             z (1+ z)
                           vly '() y 1
                    )
         )
         (SetQ l (Reverse vlz))
         (While (Progn (InitGet 7 "Exit Find  ")
                                (SetQ k (GetKWord "\nExit(结束)/<Find(提取)>: "))
                                (/= k "Exit")
                     )
                     (SetQ x (1- (GetInt (StrCat "\nX维序号(" (IToA x0) "): ")))
                                y (1- (GetInt (StrCat "\nY维序号(" (IToA y0) "): ")))
                                z (1- (GetInt (StrCat "\nZ维序号(" (IToA z0) "): ")))
                     )
                     (PrinC (Nth x (Nth y (Nth z l))))
         )
         (PrinC)
  )      
C:DataIO用于建立一个三维数组,之后提取和显示该数组中指定的数据。数组保存在变量L之中。
值得注意的是,这样的数组要占用堆区空间,不可以过于巨大,但是 AutoLISP 数组处理功能是相当强的,笔者用一台128M内存的PII 333主机,制作了生成一百万个元素的数组(每个元素是三个实数和一个索引组成):
'(1259 123.456 17.377 98706.964)
定义数组,解释运行耗时约20.7秒,编译运行耗时15.9秒。而引用任一元素仅是瞬间的事。这种数组创建和引用的能力,将能顺利解决解析程序中大矩阵运算的基础设施,也是AutoLISP具有特色的功能:简单、快速、容易控制、数据量大。

t  点评
用表类型数据结构组建数组,是一种典型的用法。“表”是 AutoLISP 中一种万能的数据结构容器,发挥你的想象力,利用表构建专业程序中的各种应用数据结构,就会体验到 AutoLISP 程序设计独特的优点,甚至在外挂工程数据文件中,也应当使用表结构。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 22:01 , Processed in 0.200398 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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