1、表直接处理,递归法(不是太熟练) - ;(setq l1 '(1 2 "," 3 (4 5 "," 6 7 (8 9 "," 10 11 "," 12)) 13 14 "," 15 16))
- ;(T11 L1 NIL NIL)
- ;=>((16 15) (14 13 12) (11 10) (9 8 7 6) (5 4 3) (2 1))
- (defun t11 (l1 l2 l3)
- (mapcar
- '(lambda(x)
- (if (= 'list (type x))
- (setq l2 (t11 x l2 l3) l3 (cdr l2) l2 (car l2))
- (if (= "," x)
- (setq l2 (cons l3 l2) l3 nil)
- (setq l3 (cons x l3))
- )
- )
- )
- l1
- )
- (cons l3 l2)
- )
2、间接处理法,通过字符处理为单括号。 - ;(setq l1 '(1 2 "," 3 (4 5 "," 6 7 (8 9 "," 10 11 "," 12)) 13 14 "," 15 16))
- ;(T12 L1)
- ;=>((16 15) (14 13 12) (11 10) (9 8 7 6) (5 4 3) (2 1))
- (defun t12 (l1 / l2 l3)
- (mapcar
- '(lambda(x)
- (if (= "," (vl-princ-to-string x))
- (setq l2 (cons l3 l2) l3 nil)
- (setq l3 (cons x l3))
- )
- )
- (read
- (strcat "("
- (vl-string-translate "()" " "
- (vl-princ-to-string l1)
- )
- ")"
- )
- )
- )
- (cons l3 l2)
- )
结果再处理- ;结果再处理
- ;((1 2) (3 4 5) (6 7 8 9) (10 11) (12 13 14) (15 16))
- (reverse(mapcar 'reverse (T12 L1)))
复制代码 |