20020672 发表于 2006-4-24 19:44:00

求助:如何在lisp中实现数组

<P>(defun qujian()<BR>&nbsp; (setq n(getint "请输入段数"))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp; (setq n0 1)<BR>&nbsp; <BR>&nbsp; (while (&lt;= n0 n)<BR>&nbsp;&nbsp;&nbsp; (setq m(getreal "请输入第"n"段跨距"))<BR>&nbsp;&nbsp;&nbsp; (setq n0 (+ n0 1))<BR>&nbsp;&nbsp;&nbsp; ))</P>
<P>每个段对应一个数据,但是其中m我不知道该怎么样才能定义成一个数组,而且不知道怎样赋下标.求各位高手帮助,不胜感激了!!!</P>

xazhji 发表于 2006-4-24 20:16:00

可以组成点对 (X . Y),用car 得到X ,cdr得到 Y

leasson 发表于 2006-4-25 12:35:00

用cons函数或append函数将其变成一个表就行了   其实在lisp中的表就相当于c语言中的数组

lazybug 发表于 2006-4-25 16:39:00

本帖最后由 作者 于 2006-4-26 16:08:21 编辑 <br /><br /> <P>二楼好主意,如下</P>
<P>(defun c:qujian&nbsp;()<BR>&nbsp;&nbsp;&nbsp; (setq n (getint "请输入段数"))<BR>&nbsp;&nbsp;&nbsp; (setq n0 1)<BR>&nbsp;&nbsp;&nbsp; (setq r_list '())<BR>&nbsp;&nbsp;&nbsp; (while (&lt;= n0 n)<BR>&nbsp;(setq tt (strcat "\n请输入第" (itoa n0) "段跨距:"))<BR>&nbsp;(setq m (getreal tt))<BR>&nbsp;(setq r_list (cons (cons n0 m) r_list))<BR>&nbsp;(setq n0 (+ n0 1))<BR>&nbsp;&nbsp;&nbsp; )<BR>)</P>
<P>;形成类似((5 . 5.0) (4 . 4.0) (3 . 3.0) (2 . 2.0) (1 . 1.0))的表<BR>;取数时用(assoc n r_list)即可,可以较好的模拟c里面的数组操作</P>
<P>还有:</P>
<P>;|vlax数组类操作函数<BR>(vlax-make-safearray)<BR>(vlax-safearray-fill)<BR>(vlax-safearray-get-dim)<BR>(vlax-safearray-get-element)<BR>(vlax-safearray-get-l-bound)<BR>(vlax-safearray-get-u-bound)<BR>(vlax-safearray-&gt;list)<BR>(vlax-safearray-put-element)<BR>(vlax-safearray-type)</P>
页: [1]
查看完整版本: 求助:如何在lisp中实现数组