再次请教一个表的问题
(defun c:tt ()(setq a '(101 201 301 401))
(setq b '(102 202 302 402))
(setq c '(103 203))
(setq d '(104 204 304 ))
(setq aa (list a b c d))
(setq yy(mapcar '(lambda (x)
(car x)
)
aa
));我只会到这里了 (101 102 103 104)
)
;希望结果
((101 102 103 104)(201 202 203 204)(301 302 304)(401 402 ))感谢!
本帖最后由 cable2004 于 2015-8-2 18:42 编辑
(defun c:tt ()
(setq a '(101 201 301 401))
(setq b '(102 202 302 402))
(setq c '(103 203))
(setq d '(104 204 304))
(setq i (apply 'max (mapcar '(lambda (e)(length e)) (list a b c d))) lst nil)
(mapcar '(lambda (e)(vl-remove nil e)) (apply 'mapcar (cons 'list (mapcar '(lambda (e)(if (= i (length e)) e (progn (repeat (- i (length e)) (setq lst (cons nil lst))) (setq dd (append e lst)) (setq lst nil) dd)) )(list a b c d)))))
) (defun tt (/ aa bb cc)
(setq aa '((101 201 301 401) (102 202 302 402) (103 203) (104 204 304)))
(setq cc nil)
(while aa
(setq bb (mapcar 'car aa))
(setq aa (vl-remove nil (mapcar 'cdr aa)))
(setq cc (cons bb cc))
)
(reverse cc)
) 本帖最后由 llsheng_73 于 2015-8-3 11:08 编辑
(defun tt(aa / e)
(repeat(apply'max(mapcar'length aa))
(setq e(cons(mapcar'car aa)e)
aa(vl-remove'nil(mapcar'cdr aa))))
(reverse e)
)
(defun tt(aa / e)
(while(setq e(cons(mapcar'car aa)e)
aa(vl-remove'nil(mapcar'cdr aa))))
(reverse e))
(tt'((101 201 301 401) (102 202 302 402) (103 203) (104 204 304)))
==>((101 102 103 104) (201 202 203 204) (301 302 304) (401 402)) nzl1116 发表于 2015-8-2 18:35 static/image/common/back.gif
(mapcar 'cdr aa)和(vl-remove nil (mapcar 'cdr aa))我测试结果一样,那为什么还要加vl-remove函数呢?请指教
补充一个图片
知道了 没有数据的时候 有的值会这NIL
(defun tt (aa / bb)
(while aa
(setq bb (append bb (list(mapcar 'car aa))))
(setq aa (vl-remove nil (mapcar 'cdr aa)))
)
bb
)
(defun tt (aa / n)
(setq n (apply 'max (mapcar 'length aa)))
(mapcar
'(lambda(y) (vl-remove nil y))
(apply 'mapcar
(cons 'list
(mapcar
'(lambda(x)
(repeat (- n (length x)) (setq x (append x '(nil))))
x
)
aa
)
)
)
)
)
同楼上2位仁兄一样
页:
[1]