setq 常驻内存lisp_lisp几种数组定义较全

本文介绍了Lisp中使用setq创建和操作数组的方法,包括通过while循环和seta函数进行数组元素赋值,geta函数获取数组元素,以及modia函数修改数组元素。示例代码展示了如何定义和操作一维数组。
摘要由CSDN通过智能技术生成

……

执行上面的代码后,会产生3个新的变量:s1=1、s2=2、s3=3,在接下来的程序中,就可以对这三个变量直接调用了。

;; 用 a 置換表 l 中 第 n 个元素(可以是子表);

;|

用法:(EA:SUBST-N '(0 2) '(99 22) '((1 2 3) 2 55 99 66)) 替换第一个子表第三项

((1 2 (99 22)) 2 55 99 66)

(EA:SUBST-N '(2 1) '(99) '(1 2 (55) 99 66)) 替换第二个子表第二项

(1 2 (55 ((99))) 99 66)

(EA:SUBST-N 2.0 '(99) '(1 2 55 99 66)) 替换第二个原子

(1 2 (99) 99 66)

|;

(defun subst-n (n a l)

(cond

((numberp n)

(if (zerop n)

(append (list a) (cdr l))

(cons (car l) (subst-n (1- n) a (cdr l)))

)

)

((listp n)

(cond

((equal (length n) 1)

(if (zerop (car n))

(append (list a) (cdr l))

(cons (car l) (subst-n (1- (car n)) a (cdr l)))

)

)

((&gt (length n) 1)

(if (zerop (car n))

(cons (subst-n (cdr n) a (car l)) (cdr l))

(cons (car l)

(subst-n (append (list (1- (car n))) (cdr n)) a (cdr l))

)

)

)

)

)

)

)

4.一种数组定义:

(progn

(setq i 0) ;数组下标初始化

(while(&lt i 10)

(set (read(strcat "NUM[" (rtos i) "]")) (* i i i i))

(princ (strcat "\nNUM[" (rtos i) "]=" (rtos (eval(read(strcat "NUM[" (rtos i) "]"))))))

(setq i (+ 1 i))

)

(princ)

)

(1)数组元素赋值函数seta(alist)返回赋值后的数组表alist。

(defun seta(alist)

(setq alist ′())

(setq a t) ;a为输入控制变量

(while a

(initget ″number angle point″)

(setq str1(getkword ″\nnumber/angle/point/″)) ;选择元素类型

(if(null str1)(setq a nul)) ;结束输入

(if(equal str1) ″number″) ;输入数

(progn

(setq va(getreal ″\ninput a number:″))

(setq alist(cons va alist))

)

)

(if (equal str1 ″angle″) ;输入角

(progn

(setq va(getangle ″\ninput a angle:″))

(setq alist(cons va alist))

)

)

(if(equal strl ″point″) ;输入点

(progn

(setq va(getpoint ″\ninput a point:″))

(setq alist(cons va alist))

)

)

(if(equal str1 ″point″) ;输入点

(progn

(setq va(getpoint ″\ninput a point:″))

(setq alist(cons va alist))

)

)

)

(reverse alist)

)

(2)数组元素输出函数geta(alist i)返回数组alist的第i个元素。

(defun geta(alist i)

(nth (1-i) alist)

)

(3)数组元素修改函数modia(alist i)对数组表alist的第i个元素进行修改,返回修改扣的数组表。

(defun modia(alist i)

(initget ″number

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值