……
执行上面的代码后,会产生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)))
)
)
((> (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(< 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