Chinaunix首页 | 论坛 | 博客
  • 博客访问: 185314
  • 博文数量: 32
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 384
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 16:02
文章分类
文章存档

2009年(3)

2008年(29)

我的朋友

分类:

2008-07-15 11:19:35

    AutoLISP没有VB中类似数组的定义,这就造成有时在程序中需要对一系列关联数据进行储存处理时比较麻烦,因为这些关联数据是程序运行的过程中产生的,个数往往是不确定的,可能是三个数据,也可能是五个数据,在VB中,你可以通过定义一个数组来解决这个问题,不必考虑数据的个数,只要保证程序运行中产生的数据个数不超过所定义数组的下标就可以了。但在AutoLISP中因为不能定义数组,就比较麻烦。
    一个可行的解决办法是将所有数据保存在一个表中,如(A B C ……),然后就可以用nth函数访问表中的某个元素。但这种方法有个缺点:对表中某个数据的修改比较麻烦。所以更好的办法是把数据以点对的形式保存在一个表中,例如((1.A) (2.B) (3.C) ……),通过assoc函数就可以对各个数据进行访问,通过subst函数即可实现对表中某个数据的修改。
    第二种方法是把所有数据保存在一个文本文件中,可以每个数据一行,通过对文本文件的读取和写入操作也可以实现类似数组的功能,但最简单的方法是下面这种:用eval函数和read函数来实现!
    一个代码片断例子:
    ……
    (setq i 3 j 1) ;;这里的i值就相当于VB中数组的下标
    (repeat i)
      (eval (read (strcat "(setq s" (itoa j) " j)")))
      (setq j (+1 j))
    )
    ……
执行上面的代码后,会产生3个新的变量:s1=1、s2=2、s3=3,在接下来的程序中,就可以对这三个变量直接调用了。
阅读(2729) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~