求助,关于表相同元素处理。
本帖最后由 雪山飞狐_lzh 于 2014-9-13 22:35 编辑下表TT 里 有重复的元素。我需要将重复元素前面添加数字符来区分。请高手帮帮。多谢!!!!
(setqtt (list "1" "2" "3" "4" "5" "1" "2" "3" ))
(list "Ⅰ1" "Ⅰ2" "Ⅰ3" "4" "5" "Ⅱ1" "Ⅱ2" "Ⅱ3" ) ;;开始study
(defun test (tt / n n_1 n_2 lst_1 I J tang tang_1)
(setq n (length tt)
n_1 0
lst_1 tt
)
(while (< n_1 n)
(if (not (listp (nth n_1 lst_1) ))
;;(listp 元素)判断元素是否为串
(progn
(setq a_1 (nth n_1 lst_1))
(setq n_2 (+ n_1 1)
I 0
)
;;求单个元素的最大次数I
(while (< n_2 n)
(setq a_2 (nth n_2 tt))
(if (= a_2 a_1)
(progn
(setq I (+ I 1))
)
)
(setq n_2 (+ n_2 1))
) ;(while (< n_2 n) 函数结束
(setq lst_1 (subst (list a_1 0 I) a_1 lst_1))
;;下面处理单个元素的次数
(setq n_2 (+ n_1 1)
J 0
)
(while (< n_2 n)
(setq a_2 (nth n_2 tt))
(if (= a_2 a_1)
(progn
(setq J (+ J 1)
tang lst_1
)
;;处理元素a_2 以后的数列
(repeat (+ n_2 1) ;(setq n_2 5j 0)
(setq tang (cdr tang))
)
(setq tang (cons (list a_1 J I) tang))
(setq tang_2 (reverse lst_1))
;;处理元素a_2 以前的数列
(repeat (- n n_2)
(setq tang_2 (cdr tang_2))
)
(setq tang_2 (reverse tang_2))
(setq lst_1 (append tang_2 tang))
)
)
(setq n_2 (+ n_2 1))
)
;;处理单个元素的次数函数结束
)
)
;;(if (= (length (nth n_1 lst_1)) 1) 函数结束
(setq n_1 (+ n_1 1))
) ;(while (< n_1 n) 函数结束
;;下面对变换后的数组lst_1 进行处理
;;( setq instead lst_1)(setq lst_1 instead )
(setq n (length lst_1)
n_1 0
a_1 nil
)
(while (< n_1 n)
;; (setq n_1 3)
(setq a_1 (nth n_1 lst_1))
(cond
((= (caddr a_1) 0)
(setq lst_1 (subst (car a_1) a_1 lst_1))
)
(t
(setq b(change_number(cadr a_1) ))
(setq b (strcat b(car a_1)))
(setq lst_1 (subst b a_1 lst_1))
)
)
(setq n_1 (+ n_1 1))
)
;;(while (< n_1 n) 函数结束
lst_1
)
;; ( test tt )
;;(ascii "Ⅰ") (setq fun "chinaⅠtang") (vl-string-position 162 fun)
;;下面函数建立(0-10)整数 和小写字母的联系
(defun connect (number / n_1 n lst_1 lst_2 lst string)
(setq lst_1 (list (list 1 "一")
(list 2 "二")
(list 3 "三")
(list 4 "四")
(list 5 "五")
)
lst_2 (list (list 6 "六")
(list 7 "七")
(list 8 "八")
(list 9 "九")
(list 0 "零")
)
lst (append lst_1 lst_2)
n (length lst)
T_1 t
n_1 0
)
(while (and (< n_1 n) T_1)
(setq a_1 (car (nth n_1 lst)))
(if (= number a_1)
(setq string (cadr (nth n_1 lst))
T_1 nil
)
)
(setq n_1 (+ n_1 1))
)
string
)
;;connenct 函数结束 (connect 5)
;;下面把整数转换成字符串
;; (setq num 12798)
(defun change_number (num / n_1 module t_1 a_2 a_1 lst lst_1 lst_2 value )
(setq module 10
t_1 t
lstnil
lst_1 nil
)
(while t_1
(setq a_2 (rem num module)
a_1 (- num a_2)
)
(if (> a_1 0)
(setq t_1 t
module (* module 10)
lst (cons a_2lst)
)
(setq t_1 nil)
)
)
;;while t_1 函数结束
(setq lst (cons num lst))
(setq lst (reverse lst))
;;对数组取整数
(setq n_1 1
lst_1 (cons (car lst) lst_1)
)
(while (< n_1 (length lst))
(setq a_1 (nth (- n_1 1) lst)
a_2 (nth n_1 lst)
)
(setq a_3 (/ (- a_2 a_1) (expt 10 n_1)))
(setq lst_1 (cons a_3 lst_1))
(setq n_1 (+ n_1 1))
)
;;换算成小写字母
(setq lst_2 (mapcar '(lambda (x) (connect x)) lst_1))
(setq value "")
(setq lst_2 (reverse lst_2))
(foreach try lst_2
(setq value (strcat try value))
)
value
)
;; (change_number 7860904)
(defun c:tt ()
(setq tt (list "1" "2" "3" "4" "5" "1" "2" "3")
lst '()
)
(foreach a tt
(if (member a lst)
(setq a (strcat "Ⅱ" a))
)
(setq lst (cons a lst))
)
(setq lst (reverse lst))
)
好玩,老猫也有不明白的地方
页:
[1]