xyp1964 发表于 2023-7-5 23:50:36

本帖最后由 xyp1964 于 2023-7-5 23:51 编辑


;|
(abc '(1 2 3 4 5 6 7 8 9 10 11) 3)→((1 2 3) (4 5 6) (7 8 9) (10 11 ""))

(abc '((1 2) (2 3) (3 4) (4 5) (5 6) (6 7) (7 8) (8 9) (9 10) (10 11 12) (11 12 13)) 3)

(((1 2) (2 3) (3 4)) ((4 5) (5 6) (6 7)) ((7 8) (8 9) (9 10)) ((10 11 12) (11 12 13) ""))
|;
(defun abc (lst n / bb tmp a)
(setq bb '() tmp '())
(while (setq a (car lst))
    (setq lst (cdr lst))
    (if (< (length tmp) n)
      (setq tmp (cons a tmp))
      (setq bb (cons (reverse tmp) bb)
            tmp (list a)
      )
    )
)
(if tmp
    (progn
      (while (< (length tmp) n) (setq tmp (cons "" tmp)))
      (setq bb (cons (reverse tmp) bb))
    )
)
(reverse bb)
)

liuhe 发表于 2023-7-6 08:31:45

wharan 发表于 2023-7-5 15:27
这个程序,结果返回有点问题。
(LHSTTOLST '(1 2 3 4 5 6 7 8 9 10 11) 5)返回((1 2 3 4 5) (6 7 8 9...

改了一下,再试试

wharan 发表于 2023-7-6 13:35:34

liuhe 发表于 2023-7-5 13:49
看着都差不多,更新了一下

没看到你更新后的代码

vitalgg 发表于 2023-7-6 21:39:24




用list:split 函数 拆分的子表,当个数不足时,最后一个子表的元素个数与前面的不等长。
可以使用 list:fill 补足




wharan 发表于 2023-7-7 00:31:59

vitalgg 发表于 2023-7-6 21:39
用list:split 函数 拆分的子表,当个数不足时,最后一个子表的元素个数与前面的不等长。
可以使用 l ...

看来还是很灵活的

gaics 发表于 2023-7-7 08:40:38

yoyoho 发表于 2023-7-5 21:12
(defun list:split (lst x / lst2)
(setq lst3 lst)
(repeat (- x (rem (length lst) x))


这思路真牛!我想象不到!
页: 1 [2]
查看完整版本: 求一个按长度拆分表成子表的函数