 - (defun endata_sub (key val_new pair_old ent_data / pair_old pair_new)
- ;defun定义联合属性列表属性值替换函数:根据组码替换联合属性列表中组码值对应点对列表的属性值。
- (setq pair_new (cons key val_new))
- ;用key和属性值val_new生成新的点对列表,赋值pair_new。
- (if (and (= (type (cdr pair_new)) 'real) (= (type (cdr pair_old)) 'real));if_1 start.
- (if (<= 0.0001 (abs (- (cdr pair_new) (cdr pair_old))));if_1.1 start.
- (setq ent_data (subst pair_new pair_old ent_data))
- ;替换ent_data中组码key对应点对列表,并更新联合属性列表ent_data。
- );if_1.1 end.
- (if (/= pair_new pair_old);if_1.2 start.
- (setq ent_data (subst pair_new pair_old ent_data))
- );if_1.2 end.
- );if_1 end.
- ent_data
- )
- (defun endata_add (key val_new ent_data / pair_new)
- ;defun定义合属性列表属性值增加函数:生成新的点对列表添加到联合属性列表中。
- (setq pair_new (cons key val_new))
- ;生成新的联合属性列表,赋值pair_new。
- (append ent_data (list pair_new))
- ;将新的点对列表pair_new添加到联合属性列表中,并更新联合属性列表ent_data。
- )
- (defun endata_find (key val ent_data / cnt)
- ;defun定义查找指定组码与属性值的函数。
- (if (= (type val) 'real);real型带有浮点数特性,需要和其他类型变量分开讨论。
- (progn;progn_1 start.
- (setq lstlen (length ent_data))
- (setq cnt 0)
- (while (<= cnt lstlen);while_1 start.
- (setq pair (nth cnt ent_data))
- (if (= (type (cdr pair)) 'real);if_1 start.对比点对列表的属性值也为real型就需要考虑浮点数特性。
- (if (> 0.00001 (abs (- (cdr pair) val)));if_1.1 start.
- (setq signal T)
- (setq signal nil)
- );if_1.1 end.
- (if (= pair (cons key val));if_1.2 start.
- (setq signal T)
- (setq signal nil)
- );if_1.2 end.
- );if_1 end.
- (setq cnt (+ 1 cnt))
- );while_1 end.
- );progn_1 end.
- (progn;progn_2 start.
- (setq lstlen (length ent_data))
- (setq cnt 0)
- (while (<= cnt lstlen);while_2 start.
- (setq pair (nth cnt ent_data))
- (if (= pair (cons key val));if_2 start.
- (setq signal T)
- (setq signal nil)
- );if_2 end.
- (setq cnt (+ 1 cnt))
- );while_2 end.
- );progn_2 end.
- )
- signal
- )
- (defun endata_insert (index lst_insert ent_data / lst_front lst_rear)
- ;defun定义根据指定索引(组码位置)把一个或多个点对列表组成的列表插入指定索引后的函数。
- (setq lst_rear ent_data lst_front (reverse ent_data))
- (repeat (+ 1 index) (setq lst_rear (cdr lst_rear)))
- ;删除索引位置之前(包括索引位置)的所有元素,赋值lst_rear。
- (repeat (- (- (length lst_front) index) 1) (setq lst_front (cdr lst_front)))
- ;删除索引位置之后(不包括索引位置)的所有元素(整个列表是倒序),赋值lst_front。
- (setq lst_front (reverse lst_front))
- ;将倒序列表拨正。
- (setq ent_data (append (append lst_front lst_insert) lst_rear))
- ;拼接插入目标列表。
- ent_data
- )
- (defun lst_del (lst stt end / cnt lst1 lst2)
- ;删除列表lst中索引为0的元素开始的第stt至第end个元素,并返回删除后的列表。
- (setq lst1 lst lst2 (reverse lst))
- (repeat (+ 1 end)
- (setq lst1 (cdr lst1))
- )
- (repeat (- (length lst) stt)
- (setq lst2 (cdr lst2))
- )
- (setq lst (append (reverse lst2) lst1))
- )
|