@ymg和LM
对不起,我的不在主题范围内,这段代码只是平分。
只是为了分享,如果其他人看到这个相似的线程。
用opt T或nil按除法或长度拆分
- (defun split (lst len opt / ls l i) ; opt, T= by division or nil=by length
- (setq i 1 l '() len (if opt (/ (length lst) len) len))
- (while lst
- (setq l (append l (list(car lst))))
- (if
- (zerop (rem i len))
- (setq ls (cons l ls) l nil)
- )
- (setq i (1+ i) lst (cdr lst))
- ) ;_ end of foreach
- (if l
- (append (reverse ls) (list l))
- (reverse ls)
- ) ;_ end of if
- ) ;_ end of defun
测试:
- (setq a '(1 2 3 4 5 6 7 8 9 0))
- ; split by division
- (split a 3 t)
- ;((1 2 3) (4 5 6) (7 8 9) (0))
- (split a 2 t)
- ;((1 2 3 4 5) (6 7 8 9 0))
- (split a 1 t)
- ;((1 2 3 4 5 6 7 8 9 0))
- ; split by length
- (split a 3 nil)
- ;((1 2 3) (4 5 6) (7 8 9) (0))
- (split a 2 nil)
- ;((1 2) (3 4) (5 6) (7 (9 0))
- (split a 1 nil)
- ;((1) (2) (3) (4) (5) (6) (7) ( (9) (0))
附言:代码标签字体小写“L”很像数字“1”,一眼就辨不出来?! |